SQL比较来自同一个表的两个最大日期

时间:2015-03-24 14:58:30

标签: sql sql-server max

我不知道怎么称呼这个话题所以我想我会解释我需要什么。 我有下表:

Id  IdPerson  date        successfully
1   1         01.01.2012  FALSE
2   1         01.01.2014  TRUE
3   2         01.01.2014  FALSE

现在我想要所有最新条目为FALSE的IdPerson 所以这只是IdPerson 2,因为IdPerson 1在2014年是真的。

我真的不知道该怎么做。

有人能帮助我吗?

迎接

4 个答案:

答案 0 :(得分:0)

在子查询中使用ROW_NUMBER() OVER (PARTITION BY ...)来查找每个人的最新条目。然后,在外部查询中,仅选择具有successfully = 'FALSE'

的查询
SELECT Id,  IdPerson,  [date]
FROM (
  SELECT ROW_NUMBER() OVER (PARTITION BY IdPerson ORDER BY [date] DESC) AS rn,
         *
  FROM MyTable ) t
WHERE t.rn = 1 AND t.successfully = 'FALSE'

答案 1 :(得分:0)

如果您使用的是SQL Server 2008 R2(或更高版本),则可以使用“应用”

select p.* from Person P
cross Apply
(
    select MAX(date) [maxdate] from Person group by Id
)a
where P.Date = a.maxdate and p.Successfully = 0

答案 2 :(得分:0)

有一种有趣的方法是使用条件聚合:

select idperson
from table t
group by idperson
having max(date) = max(case when successfully = 'false' then date end);

注意:此解决方案(以及其他解决方案)假定date以本机日期/时间格式存储。如果没有,则应修复数据库,但此查询需要使用convert()

答案 3 :(得分:0)

我在mysql中试过这个:

来自MyTable的SELECT Id,IdPerson,date,Status  WHERE status ='false'AND date = ALL(从MyTable中选择最大值(日期))    GROUP BY IdPerson);