如何解决如何获取每条记录的匹配ID?
我的表称为Card
,这是它的架构:
platform_statuses
这是我的查询,我还要获取返回记录的匹配ID。
CREATE TABLE platform_statuses (
id SERIAL,account INTEGER REFERENCES users (id),time TIMESTAMP DEFAULT NOW(),value_in_cents INTEGER NOT NULL,status INTEGER NOT NULL CHECK (
0 < status
AND status < 4
) DEFAULT 2,-- 1: Active,2: Suspended,3: Market is closed
open_trades INTEGER NOT NULL,PRIMARY KEY (id)
);
还要注意,您在查询中看到的abs函数是一个自定义的answer。这是它的定义:
SELECT
max(timediff),time :: date,account
FROM
(
SELECT
id,time,account,abs(time - date_trunc('day',time + '12 hours')) as timediff
FROM
platform_statuses
) AS subquery
GROUP BY
account,time :: date
解决方法
我了解到,对于每个帐户和每天,您都希望拥有最高timediff
的记录。如果是这样,您可以直接在现有的子查询上使用distinct on()
:
select distinct on (account,time::date)
id,time,account,abs(time - date_trunc('day',time + '12 hours')) as timediff
from platform_statuses
order by account,time::date,timediff desc
,
为什么不只是:
select * from platform_statuses
where abs(time - date_trunc('day',time + '12 hours')) =
(
select max(abs(time - date_trunc('day',time + '12 hours')))
from platform_statuses
)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。