很抱歉在第一篇文章中不清楚。如果该项仅出现一次,则还应包括在内。请检查更新的示例表。。。
我有一张每天每件商品的销售记录表。此表的候选键是项目id和日期的组合。我想得到的是每个项目最后(最新)连续日期的所有记录的视图。如果该项只出现一次,则也应包括在内。
我所拥有的

+---------+------------+------------+
| item_id |    date    | gross_sale |
|  (text) |   (date)   |  (double)  |
+---------+------------+------------+
| 11aa    | 2019-01-01 |         45 |
| 11aa    | 2019-01-02 |         85 |
| 22bb    | 2019-01-01 |         65 |
| 22bb    | 2019-01-02 |         15 |
| 22bb    | 2019-01-03 |         45 |
| 11aa    | 2019-01-05 |         32 |
| 33cc    | 2019-01-05 |         11 |
| 22bb    | 2019-01-05 |         23 |
| 22bb    | 2019-01-06 |         56 |
| 11aa    | 2019-01-06 |         78 |
| 11aa    | 2019-01-07 |         12 |
| 11aa    | 2019-01-08 |         45 |
+---------+------------+------------+

我想要什么
+---------+------------+------------+
| item_id |    date    | gross_sale |
+---------+------------+------------+
| 11aa    | 2019-01-05 |         32 |
| 11aa    | 2019-01-06 |         78 |
| 11aa    | 2019-01-07 |         12 |
| 11aa    | 2019-01-08 |         45 |
| 22bb    | 2019-01-05 |         23 |
| 22bb    | 2019-01-06 |         56 |
| 33cc    | 2019-01-05 |         11 |
+---------+------------+------------+

我从几篇文章中读到,它可以简单地使用CTE和window完成,但我对它们还是很陌生的。如果你不介意的话,能不能请你也解释一下你的代码是如何工作的?
干杯!

最佳答案

您可以枚举行并添加从数据末尾开始的递增序列

select t.*
from (select t.*,
             row_number() over (partition by item_id order by date desc) as seqnum,
             max(date) over (partition by item_id) as max_date
      from t
     ) t
where date + (seqnum - 1) * interval '1 day' = max_date

关于sql - 检索PostgreSQL中最后连续日期的记录,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57300516/

10-09 21:21