繁体   English   中英

获取每对夫妇的最新值(姓名,地址)

[英]Get the latest value for each couple (name,address)

我有下表,我需要为其获取组的最新值(名称,地址)。 这意味着我需要每个(名称,地址)对具有max(time)并获取该时间值的last_read。 如何在一个选择查询中做到这一点?

表links_data

我认为下面应该适合您,您需要使用GROUP BYMAX

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

在大多数数据库中,相关子查询是一种很好的方法:

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)上的索引。

如果您的dbms支持,则可以使用row_number()

select * from 
(select *,row_number() over(partition by name,address order by time desc) rn
) t where t.rn=1

上述解决方案均无效。 我终于找到了下面的查询有效:

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;

感谢大家。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM