Sql 如果有重复记录,请选择最近的记录
所以我一直在为这个问题挠头,主要是因为我使用的是access 2010,而我在互联网上发现的大多数查询都有无法访问的命令Sql 如果有重复记录,请选择最近的记录,sql,ms-access-2010,Sql,Ms Access 2010,所以我一直在为这个问题挠头,主要是因为我使用的是access 2010,而我在互联网上发现的大多数查询都有无法访问的命令 id name date qty created ==================================================== 1 abc 01/2016 20 06/07/2016 11:00 2 abc 02/2016 20 06/
id name date qty created
====================================================
1 abc 01/2016 20 06/07/2016 11:00
2 abc 02/2016 20 06/07/2016 11:00
3 abc 03/2016 20 06/07/2016 11:00
4 abc 01/2016 30 06/07/2016 13:00
我需要像这样取出一个记录集:
id name date qty created
====================================================
2 abc 02/2016 20 06/07/2016 11:00
3 abc 03/2016 20 06/07/2016 11:00
4 abc 01/2016 30 06/07/2016 13:00
创建的字段只是一个时间戳,日期字段是一个“截止日期”。基本上,我需要拿出每个名称和日期的最新数量。ID是唯一的,因此如果更简单的话,我可以使用它。
到目前为止,我已经:
SELECT m1.date, m1.name, m1.created
FROM table AS m1 LEFT JOIN table AS m2 ON (m1.created < m2.created) AND
(m1.date = m2.date)
WHERE m2.created IS NULL;
选择m1.date、m1.name、m1.created
从作为m1的表开始,将作为m2的表左连接到ON(m1.created
但这一条只提供了最新的冲突数据,即示例中的记录n°4。我还需要另外两条记录。有什么想法吗?尝试使用不存在()
我认为您还缺少一个条件,因此我添加了它:
and t.name = s.name
您没有标记RDBMS,如果它是SQL Server/Oracle/Postgresql,您可以使用行号()
:
试试这个:
SELECT m1.date, m1.name, m1.qty, m1.created
FROM table AS m1
JOIN (
SELECT date, name, MAX(created) AS created
FROM table
GROUP BY date, name
) AS m2 ON m1.date = m2.date AND m1.name = m2.name AND m1.created = m2.created
这个有效,非常感谢。我无法添加dbrms,因为msaccess标记需要1500个rep,所以我只是在问题中写了它。我也尝试过使用row_number,但我没有任何这方面的经验,它似乎没有在access上实现
SELECT s.date, s.name, s.created FROM (
SELECT t.*,
ROW_NUMBER() OVER(PARTITION BY t.date,t.name ORDER BY t.created DESC) as rnk
FROM YourTable t) s
WHERE s.rnk = 1
SELECT m1.date, m1.name, m1.qty, m1.created
FROM table AS m1
JOIN (
SELECT date, name, MAX(created) AS created
FROM table
GROUP BY date, name
) AS m2 ON m1.date = m2.date AND m1.name = m2.name AND m1.created = m2.created