Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 获取每对夫妇的最新值(姓名、地址)_Sql - Fatal编程技术网

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

Sql 获取每对夫妇的最新值(姓名、地址),sql,Sql,我有下表,需要获取组的最新值(名称、地址)。 这意味着我需要为每对(姓名、地址)夫妇设置最大值(时间),并获取该时间值的最后一次读取。 如何在一个select查询中做到这一点 我认为下面应该适合您,您需要使用分组依据和MAX select max([time]), [name], [address] from yourTable group by [name], [address] 编辑 您可以尝试其他答案或检查以下使用临时表的选项 select max([time]

我有下表,需要获取组的最新值(名称、地址)。 这意味着我需要为每对(姓名、地址)夫妇设置最大值(时间),并获取该时间值的最后一次读取。 如何在一个select查询中做到这一点


我认为下面应该适合您,您需要使用
分组依据
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

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

select t.*
from t
where t.time = (select max(t2.time)
                from t t2
                where t2.name = t.name and t2.address = t.address
               );

特别是,这可以利用
(名称、地址、时间)

上的索引。如果您的dbms支持,您可以使用
行编号()

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;

谢谢大家。

最常见的方法是在子查询中对名称和地址进行分组,获取最大(时间)名称和地址,并将结果与表格连接起来。。我敢肯定,当你搜索“每个组的SQL最大值”时,你可以在这个网站上找到例子。。您应该更新问题,以将预期结果也包括在格式化数据表中。我尝试了此查询,在其中添加了列last_read,但不幸的是,它为max(time)提供了正确的值,但为last_read提供了错误的值。