我有一张下表,该表格需要获取该组的最新值(name,address)。 这意味着我需要每个(名称,地址)对具有max(time)并获取该时间值的last_read。 如何在一个选择查询中做到这一点?
答案 0 :(得分:1)
我认为下面的方法适合您,您需要使用GROUP BY
和MAX
select max([time]),
[name],
[address]
from yourTable
group by [name],
[address]
编辑
您可以尝试其他答案或在下面使用临时表进行检查
select max([time]) as last_read_time,
[name],
[address]
into #temp_table
from yourTable
group by [name],
[address]
select last_read
from yourTable as yt
inner join #temp_table t
on yt.[name] = t.[name]
and yt.[time] = t.last_read_time
IF OBJECT_ID('tempdb..#temp_table', 'U') IS NOT NULL
答案 1 :(得分:0)
在大多数数据库中,相关子查询是一种很好的方法:
select t.*
from t
where t.time = (select max(t2.time)
from t t2
where t2.name = t.name and t2.address = t.address
);
尤其是,这可以利用(name, address, time)
上的索引。
答案 2 :(得分:0)
如果您的dbms支持,则可以使用static_cast
row_number()
答案 3 :(得分:0)
以上解决方案均无效。 我终于找到了下面的查询:
select
l2.MAX t,
l.name,
l.address,
l.last_read
from links_data l
inner join (select name,
address,
max(time) as "MAX"
from links_data
group by name, address) l2
on l.name = l2.name
and l.address = l2.address
and l.time = l2.MAX;
谢谢大家。