按日期选择不同的前一条记录
Posted
技术标签:
【中文标题】按日期选择不同的前一条记录【英文标题】:Select Distinct Top One Record by Date 【发布时间】:2020-09-03 17:50:03 【问题描述】:我正在编写一个脚本来比较服务器之间的软件,但有一个多对多的关系情况可以干净地执行它。我认为按最新日期类型的查询可能会有所帮助。这样我就可以从这里出发了
到这个简短而干净的列表
我不确定如何解决这个问题?我应该从排序开始,然后按日期区分顶部吗?
【问题讨论】:
【参考方案1】:您也可以尝试使用row_number()
select * from
(
select *, row_number() over(partition by software_list order by date desc) as rn
from tablename
)A where rn=1
【讨论】:
【参考方案2】:关联子查询怎么样?
select t.*
from t t2
where t.date = (select max(t2.date) from t t2 where t2.software_list = t.software_list);
【讨论】:
【参考方案3】:这是使用 LAST_VALUE 的另一种方式。无需子查询即可工作
数据
drop table if exists #tTEST;
go
select * INTO #tTEST from (values
('Software1', '1.0.0.1', '1900-01-01'),
('Software1', '1.1.1.1', '2020-03-04'),
('Software2', '3.2.2.1', '1900-01-01'),
('Software2', '3.3.3.1', '2020-03-04'),
('Software2', '4.5.0.0', '2020-05-07')) V(Software_List, [Version], [Date]);
查询
select distinct Software_List,
last_value([Version]) over (partition by Software_List order by [Date]
rows between unbounded preceding and unbounded following) [Version],
last_value([Date]) over (partition by Software_List order by [Date]
rows between unbounded preceding and unbounded following) [Date]
from #tTEST t;
结果
Software_List Version Date
Software1 1.1.1.1 2020-03-04
Software2 4.5.0.0 2020-05-07
【讨论】:
以上是关于按日期选择不同的前一条记录的主要内容,如果未能解决你的问题,请参考以下文章