繁体   English   中英

在PostgreSQL中检索最后连续日期的记录

[英]Retrieve Records of the Last Consecutive Dates in PostgreSQL

编辑抱歉,因为在第一篇文章中不清楚。 如果该项仅出现一次 ,则也应将其包括在内 请检查更新的样品表...

我有一张每天每件商品的销售记录表。 该表的候选键将是item_id和date的组合。 我想要获取的是每个项目的最近(最近)连续日期的所有记录的视图。 如果该项仅出现一次,则也应包括在内。

我有的

+---------+------------+------------+
| 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

无需cte,您可以使用此简单查询。

select distinct t1.item_id, t1.maxdate, t2.gross_sale from 
    (select item_id, max(date) as maxdate from table1 group by item_id) as t1
left join table1 t2 on t2.item_id= t1.maxdate and t1.item_id=t2.item_id

您可以通过相关子查询来检查特定item_id的日期差异

       SELECT ITEM_ID, DATE, 
       GROSS_SALE FROM TABLE  X
         Where Item_Id In (Select 
          Item_id from table t where 
         abs(t.Date-X.Date)=1)
        Order 
       by Item_id asc, Date desc 

暂无
暂无

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

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