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 分组);
我不知道如何称呼这个主题,所以我想我只是解释一下我需要什么。 我有以下 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 分组);