我不知道怎么称呼这个话题所以我想我会解释我需要什么。 我有下表:
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年是真的。
我真的不知道该怎么做。
有人能帮助我吗?
迎接
答案 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);