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

SQL比较同一表中的两个最大日期,sql,sql-server,max,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 2,因为IdPerson 1在2014年是真的 我真的不知道该怎么做 有人能帮我吗 问候在分区

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

Id  IdPerson  date        successfully
1   1         01.01.2012  FALSE
2   1         01.01.2014  TRUE
3   2         01.01.2014  FALSE
现在我想要所有最新条目为FALSE的人 这就是IdPerson 2,因为IdPerson 1在2014年是真的

我真的不知道该怎么做

有人能帮我吗

问候

在分区上使用行数。。。在子查询中查找每个人的最新条目。然后,在外部查询中,仅选择那些已成功设置为“FALSE”的查询:


如果您使用的是SQL Server 2008 R2或更高版本,则可以使用Apply

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

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

select idperson
from table t
group by idperson
having max(date) = max(case when successfully = 'false' then date end);
注意:此解决方案和其他解决方案都假定日期以本机日期/时间格式存储。如果没有,您应该修复数据库,但此查询需要使用convert。

我在mysql中尝试过:

从MyTable中选择Id、IdPerson、日期、状态 其中status='false'和date=ALL从MyTable中选择maxdate 按个人分组

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