Sql 如果有重复记录,请选择最近的记录

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/

所以我一直在为这个问题挠头,主要是因为我使用的是access 2010,而我在互联网上发现的大多数查询都有无法访问的命令

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