2013-06-24 176 views
1

说值中的一予具有值:删除对基于日期

Reference  Class Timestamp 
XXHAG70  11  2013-05-07 14:29:59.820 
XXHAG70  11  2013-05-07 14:33:19.780 
XXHAG70  17  2013-05-07 14:30:19.930 
XXHAG70  17  2013-05-07 14:33:44.690 
PAF7010  06  2008-11-06 10:25:07.140 
PAF7010  06  2009-02-27 12:56:11.420 

每个类都有一个重复的值,因此被配对。我想为每个参考中的每个类选择最早的时间戳。

回答

0

要获取最古老的每个类/参考,使用MINGROUP BY

SELECT Reference, Class, MIN(Timestamp) 
FROM myTable 
GROUP BY Reference, Class 
0

你可以使用MIN

SELECT MIN(TimeStamp) 
FROM YourTable 
WHERE Class IN (SELECT DISTINCT Class From YourTable) 
1

你可以使用ROW_NUMBER函数。

SELECT Reference , 
     Class , 
     Timestamp 
FROM (SELECT Reference , 
        Class , 
        Timestamp , 
        ROW_NUMBER() OVER (PARTITION BY Reference, Class ORDER BY Timestamp) AS rnum 
      FROM  MyTable 
     ) A 
WHERE rnum = 1; 
+0

应该是'分区的参考,Class',而且你想保留最古老的行,所以试试'哪里rnum> 1' – Andomar

+0

你是对的Andomar,我纠正它。 – souplex

0

这将删除所有,但每(reference, class)最古老的行:

delete from t1 
from (
     select row_number() over (
        partition by reference, class 
        order by Timestamp desc) rn 
     ,  * 
     from YourTable 
     ) t1 
where t1.rn > 1 

Live example at SQL Fiddle.