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);
我有一个 "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);