2016-07-06 97 views
2

所以我一直在挠我的头在这一个,主要是因为我在访问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; 

但是这一次给了我只有最近的冲突的数据,即。在我的例子中,记录n°4也需要另外两条记录。有什么想法吗?

回答

1

尝试使用NOT EXISTS()

SELECT * FROM YourTable t 
WHERE NOT EXISTS(SELECT 1 FROM YourTable s 
       WHERE t.date = s.date and s.created > t.created 
        AND t.name = s.name) 

我想你也缺少一个条件,使我增加了它:

and t.name = s.name 

你没有标记您的RDBMS,如果SQL-服务器/ ORACLE/PostgreSQL里你可以使用ROW_NUMBER()

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 
+0

这个工作,非常感谢。我无法添加dbrms,因为msaccess标签需要1500代表,所以我只是写在问题中。我也尝试使用row_number,但我没有任何经验,它似乎没有实现访问 – frankiehf

+0

是的,Access不支持'ROW_NUMBER' @frankiehf。没问题.. – sagi

0

试试这个:

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 
相关问题