如何获取每条记录的匹配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
)