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

SQL get last 90 days records of an id, with each id having different last day

我有一个 "Daily usage" table 是这样的:

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,因为我想要从最后一天

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

使用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);