SQL获取一个ID的最近90天记录,每个ID的最后一天都不同

时间:2018-07-26 13:59:22

标签: sql netezza

我有一个“每日使用情况”表,如下所示:

ID, Date, Usage
1, 2018-07-25, 30
1, 2018-07-23, 30
1, 2018-07-22, 30
1, 2018-07-21, 30
1, 2018-07-20, 30
2, 2018-07-29, 30
2, 2018-07-28, 30
2, 2018-07-27, 30
2, 2018-07-26, 30

如何获取ID的最近3天记录,每个ID的最后一天都不相同,最好在Netezza SQL中,即

ID, Date, Usage
1, 2018-07-25, 30
1, 2018-07-23, 30
2, 2018-07-29, 30
2, 2018-07-28, 30
2, 2018-07-27, 30

请注意,对于ID = 1,只能获取07-25(第3天)和07-23(第1天),但不能获取07-22,因为我希望从上一天起3天之内的任何可用日期

我认为rank()或row_number()可能不适合这份工作

1 个答案:

答案 0 :(得分:3)

使用row_number()

select t.*
from (select t.*, row_number() over (partition by id order by date desc) as seqnum
      from t
     ) t
where seqnum <= 3;

编辑:

如果您希望最多2天,请使用:

select t.*
from (select t.*, max(date) over (partition by id) as max_date
      from t
     ) t
where date >= duration_subtract(max_date, -2);