如果列中有2条相同的记录,则选择最新记录


Select latest record if column has 2 of the same

我有一个表

**id name status date**
1 john 2 01.01.2010
2 mike 5 04.01.2010
3 john 2 06.01.2010
4 sam  1 08.01.2010

john有两次状态2,我需要从这个状态= 2的表中选择john,mike,但是我需要显示最新的记录。我不能使用order by,我已经用它来做别的事情了。

您可以将order by用于以下多个条件:

ORDER BY date desc, status desc

您需要使用像这样的相关子查询:

select * 
from table t1
where t1.date = ( select max( t2.date )
                  from table t2
                  where t1.name = t2.name
                  and t1.status = t2.status )

如果不需要ID字段,查询会快得多:

SELECT t.name, t.status, max(t.date) date
FROM table t
GROUP BY t.name, t.status
ORDER BY [whatever]

如果您确实需要id,并且id保证在具有较新日期的记录上较大,则可以将max(t.id) id添加到字段列表中。

SELECT *
FROM table t
WHERE status = 2
AND date = (SELECT MAX(date) FROM table tmp WHERE tmp.name = t.name GROUP BY name)