【问题标题】:How to compare data with the previous day?如何与前一天的数据进行比较?
【发布时间】:2021-11-05 14:07:21
【问题描述】:

我想创建一个表,其中每天都会显示昨天未使用的 ID 例如,我有一张带有 id 和日期的表格

id  date
1    2021-09-01
2    2021-09-02
10   2021-09-02
14   2021-09-02
20   2021-09-02
3    2021-09-03
20   2021-09-03
14   2021-09-03
4    2021-09-04
10   2021-09-04
5    2021-09-05
6    2021-09-06

所以想要的结果是

1    2021-09-01
2    2021-09-02
10   2021-09-02
14   2021-09-02
20   2021-09-02
3    2021-09-03
4    2021-09-04
10   2021-09-04
5    2021-09-05
6    2021-09-06

我正在考虑这样的事情,但不确定它的最优性

select *
into transit
from table t0
join table t on t.date = t0.date - 1 and t.id = t0.id

select * 
from table 
except 
select *
from transit

【问题讨论】:

  • 愿意分享您对此事的研究吗?您已经尝试过哪些代码?
  • @ΔO'deltazero' 编辑了问题

标签: sql postgresql select


【解决方案1】:

看起来你可以查询每个 id 的最小使用日期:

SELECT   id, MIN(date)
FROM     mytable
GROUP BY id
ORDER BY MIN(date) ASC

编辑:
根据明确要求,可以使用not exists运算符查找前一天没有相同id对应行的行:

SELECT id, date
FROM   mytable curr
WHERE  NOT EXISTS (SELECT *
                   FROM   mytable prev
                   WHERE  curr.id = prev.id AND
                          curr.date = prev.date + INTERVAL '1 DAY')

【讨论】:

  • 不完全正确,编辑了虚拟数据,更改了 2021-09-04 的 id 以显示脚本不起作用的情况
  • @user458 我想我现在正确理解了这些要求。请参阅我编辑的答案。
  • 非常感谢!但是有没有办法通过减去一天而不是添加来做到这一点?
  • @user458 你可以反转条件:curr.date - INTERVAL '1 DAY' = prev.date
猜你喜欢
  • 1970-01-01
  • 2013-03-18
  • 2021-10-18
  • 2019-01-09
  • 1970-01-01
  • 2014-10-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多