繁体   English   中英

postgres / sql 自连接比较行

[英]postgres / sql self join comparing rows

我有以下示例表

id, label, reason, timestamp
7, 123, ok, 10:50:01
6, 124, reject, 10:53:01
5, 123, reject, 10:30:02
4, 124, ok, 10:30:01

我想获取如果标签的最后一条记录(最新时间戳)是可以的行,我们会在结果中显示它,但如果有拒绝,我们不会。

例如

7, 123, ok, 10:50:01

这应该很简单,但我真的有问题。 有人可以帮忙吗? 提前致谢。

我建议在以下方面distinct on

select t.*
from (select distinct on (label) t.*
      from t
      order by label, timestamp desc
     ) t
where reason = 'ok';

你也可以这样做:

select t.*
from t
where t.timestamp = (select max(t2.timestamp)
                     from t t2
                     where t2.label = t.label
                    ) and
      t.reason = 'ok';

这是您的查询。

select t1.* from 
  (select row_number() over (order by timestamp desc) as rn
       , id, label, reason, timestamp
   from tableA) as t1 
where t1.rn = 1 and t1.reason = 'ok'

我们可以在这里使用一些存在的逻辑:

SELECT id, label, reason, timestamp
FROM yourTable t1
WHERE
    reason = 'ok' AND
    NOT EXISTS (SELECT 1 FROM yourTable t2
                WHERE t2.label = t1.label AND
                      t2.timestamp > t1.timestamp);

这假设您想要具有最新时间戳的匹配单行

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM