我有几个带有记录添加日期的业务部门ID,我想获取仅添加最后一条记录时的行
2018-06-26 22:54:51.190 1
2018-07-05 10:36:49.563 1
2018-07-16 10:14:04.093 1
2018-07-17 15:24:22.173 1
2018-07-19 10:40:24.700 1
2018-07-23 09:53:34.607 13
2018-07-23 09:53:57.107 13
2018-09-04 14:55:04.860 4
2018-09-04 14:56:34.147 4
应该是
2018-07-19 10:40:24.700 1
2018-07-23 09:53:57.107 13
2018-09-04 14:56:34.147 4
我尝试过
select
mnt.DateAdded,
bu.BuId
from BusinessUnit bu
inner join MagicNumbersTable mnt on mnt.BuId = bu.BuId
where bu.BuId in (select top 1 b.BuId
from BusinessUnit b inner join MagicNumbersTable m on b.BuId = m.BuId
group by b.BuId, m.DateAdded
order by m.DateAdded desc)
只返回一条记录,而不按每bu加上日期的desc返回每个第一条记录
实现此目标的正确方法是什么?
答案 0 :(得分:3)
您可以将row_number()
函数与 ties 子句一起使用:
select top (1) with ties mnt.DateAdded, bu.BuId
from BusinessUnit bu inner join
MagicNumbersTable mnt
on mnt.BuId = bu.BuId
order by row_number() over (partition by bu.BuId order by mnt.DateAdded desc);
但是,您可以简单地将GROUP BY
和MAX()
一起使用,但是假设您想要更多有关此的信息。如果没有,那么GROUP BY
条就足以实现不需要使用subuqery
或row_number()
答案 1 :(得分:0)
根据我的理解,我写了这篇。您对此有何看法。
create table #maxDate (date datetime, id int)
insert #maxDate values
( '2018-06-26 22:54:51.190', 1)
, ( '2018-07-05 10:36:49.563', 1)
, ( '2018-07-16 10:14:04.093', 1)
, ( '2018-07-17 15:24:22.173', 1)
, ( '2018-07-19 10:40:24.700', 1)
, ( '2018-07-23 09:53:34.607', 13)
, ( '2018-07-23 09:53:57.107', 13)
, ( '2018-09-04 14:55:04.860', 4)
, ( '2018-09-04 14:56:34.147', 4)
select id, max(date) date from #maxDate
group by id
id date
-------------------------------
1 2018-07-19 10:40:24.700
4 2018-09-04 14:56:34.147
13 2018-07-23 09:53:57.107
如果查询需要更新,请回复我。