gpt4 book ai didi

SQL语句根据最新日期选择最新版本数据的值

转载 作者:行者123 更新时间:2023-12-02 23:47:14 26 4
gpt4 key购买 nike

我有一个简单的查询,想知道是否可以更优雅地编码。最终的解决方案必须符合 ansi 标准。

我需要根据日期和版本从表中获取最新值。一个示例可以更清楚地解释:

declare @t table (id int, due_date smalldatetime, version int, value nvarchar(10))

insert into @t select 3, '1/1/2010', 1, 'value 1'
insert into @t select 3, '1/1/2010', 2, 'value 2'
insert into @t select 3, '3/1/2010', 1, 'value 3'
insert into @t select 3, '3/1/2010', 2, 'value 4'
insert into @t select 3, '3/1/2010', 3, 'value 5'
insert into @t select 3, '3/1/2010', 4, 'value 6'
insert into @t select 3, '4/1/2010', 1, 'value 7'
insert into @t select 3, '4/1/2010', 2, 'value 8'
insert into @t select 3, '4/1/2010', 3, 'value 9'


select value from @t t
inner join (select due_date, version=max(version)
from @t where due_date = (select max(due_date) from @t) group by due_date) maxes
on t.due_date=maxes.due_date and t.version=maxes.version

所以我希望输出是

value 9

它是基于上面的查询。

我对这个解决方案不是特别满意 - 有更好的方法来实现这个目标吗?

最佳答案

您可以使用:

  SELECT TOP 1 
x.value
FROM @t x
ORDER BY x.due_date DESC, x.version DESC

不过,TOP 不是 ANSI。另一种选择是使用 ANSI 分析/排名/窗口函数:

SELECT x.value
FROM (SELECT t.value,
ROW_NUMBER() OVER (ORDER BY t.due_date DESC, t.version DESC) AS rank
FROM @t t) x
WHERE x.rank = 1

但这需要一个支持该功能的数据库 - MySQL 不支持,PostgreSQL 仅从 v8.4 开始...

关于SQL语句根据最新日期选择最新版本数据的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3196260/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com