我有一个名为“位置”的表,如下所示
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/