如果列有 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 个相同的记录,则选择最新记录的主要内容,如果未能解决你的问题,请参考以下文章

根据上次日期选择记录

从 Oracle 中选择最新的两条不同记录

仅为每组记录选择最近的记录

使用存储过程保留最新的3条记录,删除所有记录

选择加入2个表和两个表的最新记录

获取每个 id 的最新记录