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

SQL compare two max Dates from the same table

我不知道如何称呼这个主题,所以我想我只是解释一下我需要什么。 我有以下 table:

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 年是正确的。

我真的不知道该怎么做。

有人可以帮助我吗?

问候

在子查询中使用 ROW_NUMBER() OVER (PARTITION BY ...) 来定位每个人的最新条目。然后,在外部查询中,select 只有那些 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'

如果您使用的是 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);

注意:此解决方案(以及其他解决方案)假定 date 以本机 date/time 格式存储。如果不是,您应该修复数据库,但此查询需要使用 convert().

我在 mysql 中试过这个:

SELECT 来自 MyTable 的 ID、IdPerson、日期、状态 WHERE status='false' AND date= ALL( SELECT max(date) from MyTable 按 IdPerson 分组);