SQL - 仅按最大日期选择唯一名称?

标签 sql sql-server-2008 sql-server-2008-r2

我有一个名为“位置”的表,如下所示

Name       Date
Location A 01/01/2014
Location A 12/12/2013
Location B 01/01/2014
Location C 01/01/2014
Location D 01/01/2014
Location D 12/12/2013
Location E 12/12/2013

我只想返回日期为 MAX(Date) 的名称,即 01/01/2014,并且该名称只有 1 行且日期为 MAX(Date)

为了进一步解释,我想返回

Name       Date
Location B 01/01/2014
Location C 01/01/2014

我尝试了一些查询,例如 HAVING 语句,但似乎无法获得所需的结果

最佳答案

这似乎有效:

declare @t table (Name varchar(49), [Date] date)
insert into @t(Name,[Date]) values
('Location A','20140101'),
('Location A','20131212'),
('Location B','20140101'),
('Location C','20140101'),
('Location D','20140101'),
('Location D','20131212'),
('Location E','20131212')

select Name,MAX(Date)
from @t
group by Name
having MIN(Date) = (select MAX(Date) from @t)

这里使用哪种聚合并不重要:

select Name,MAX(Date)

前提是对日期的引用是聚合的。

结果:

Name                                              
------------------------------------------------- ----------
Location B                                        2014-01-01
Location C                                        2014-01-01

逻辑是 - 如果特定名称最早日期也是整个表的最新日期,那么逻辑上只有此名称有一个条目,它是表中的最新日期。

(这是基于每个位置每天只能有一个条目的假设)

关于SQL - 仅按最大日期选择唯一名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21429568/

相关文章:

sql - XQuery [nodes()] : Syntax error near '<eof>' , 需要一个步骤表达式

SQL 基本并发

sql - 从两个数据库中查询其中一个数据库中可能不存在表

sql - 什么时候交易会成为一种负担而不是一种好处?

php - 使用 PHP 计算重复值并显示来自 mysql 表的每个不同值

sql - MSSQL 和 TSQL 有什么区别?

sql - 表基数

sql-server - 将 NULL 值替换为结果集系列中最新的非 NULL 值 (SQL Server 2008 R2)

sql - 选择仅包含特定表的数据库

sql - 在所有数据库表中查找特定行数据?不创建过程或表