Select 持续天数内每天 table 中记录的最后一个条目
Select the last entry recorded in a table for each day, within a duration of days
如何 select 记录每天的最后一个条目?在此示例中,我需要过去 5 天内每天订购的最后一个项目编号和最后一个 DateOrdered 条目。这是我的 table:
ItemNumber | DateOrdered
1 2020-04-01 08:00:00.000
3 2020-04-01 09:00:00.000
5 2020-04-01 10:00:00.000
4 2020-04-02 09:00:00.000
6 2020-04-02 10:00:00.000
7 2020-04-03 08:00:00.000
3 2020-04-03 09:00:00.000
2 2020-04-03 10:00:00.000
5 2020-04-04 10:00:00.000
8 2020-04-05 08:00:00.000
2 2020-04-05 09:00:00.000
8 2020-04-05 10:00:00.000
这是我需要的结果:
ItemNumber | DateOrdered
5 2020-04-01 10:00:00.000
6 2020-04-02 10:00:00.000
2 2020-04-03 10:00:00.000
5 2020-04-04 10:00:00.000
8 2020-04-05 10:00:00.000
这是我能得到的最接近的结果:
with tempTable as
(
select
*,
row_number() over(partition by datediff(d, 0, DateOrdered) order by DateOrdered desc) as rn
from myTable
)
select *
from tempTable
where rn = 1
你快到了。您只需修复分区的定义,以便将属于同一天的所有行放在一起。
应该这样做:
with tempTable as
(
select
*,
row_number() over(partition by cast(DateOrdered as date) order by DateOrdered desc) as rn
from myTable
)
select *
from tempTable
where rn = 1
如何 select 记录每天的最后一个条目?在此示例中,我需要过去 5 天内每天订购的最后一个项目编号和最后一个 DateOrdered 条目。这是我的 table:
ItemNumber | DateOrdered
1 2020-04-01 08:00:00.000
3 2020-04-01 09:00:00.000
5 2020-04-01 10:00:00.000
4 2020-04-02 09:00:00.000
6 2020-04-02 10:00:00.000
7 2020-04-03 08:00:00.000
3 2020-04-03 09:00:00.000
2 2020-04-03 10:00:00.000
5 2020-04-04 10:00:00.000
8 2020-04-05 08:00:00.000
2 2020-04-05 09:00:00.000
8 2020-04-05 10:00:00.000
这是我需要的结果:
ItemNumber | DateOrdered
5 2020-04-01 10:00:00.000
6 2020-04-02 10:00:00.000
2 2020-04-03 10:00:00.000
5 2020-04-04 10:00:00.000
8 2020-04-05 10:00:00.000
这是我能得到的最接近的结果:
with tempTable as
(
select
*,
row_number() over(partition by datediff(d, 0, DateOrdered) order by DateOrdered desc) as rn
from myTable
)
select *
from tempTable
where rn = 1
你快到了。您只需修复分区的定义,以便将属于同一天的所有行放在一起。
应该这样做:
with tempTable as
(
select
*,
row_number() over(partition by cast(DateOrdered as date) order by DateOrdered desc) as rn
from myTable
)
select *
from tempTable
where rn = 1