如果列有 2 个相同的记录,则选择最新记录
Posted
技术标签:
【中文标题】如果列有 2 个相同的记录,则选择最新记录【英文标题】:Select latest record if column has 2 of the same 【发布时间】:2011-08-19 00:42:24 【问题描述】:我有桌子
**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
用于超过 1 列。
【参考方案1】:
您可以将order by
用于多个条件,如下所示:
ORDER BY date desc, status desc
【讨论】:
【参考方案2】:您需要使用相关的子查询,例如:
select *
from table t1
where t1.date = ( select max( t2.date )
from table t2
where t1.name = t2.name
and t1.status = t2.status )
【讨论】:
【参考方案3】:如果您不需要 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
添加到字段列表中即可。
【讨论】:
【参考方案4】:SELECT *
FROM table t
WHERE status = 2
AND date = (SELECT MAX(date) FROM table tmp WHERE tmp.name = t.name GROUP BY name)
【讨论】:
以上是关于如果列有 2 个相同的记录,则选择最新记录的主要内容,如果未能解决你的问题,请参考以下文章