2013-10-12 33 views
2

假設您有一個包含3列的數據集:ID,用戶,日期。基於ID的組行,然後返回每個ID分組具有最低日期的行

即使某些行具有相同的ID,是否可以根據最短日期過濾數據?

對不起,如果問題有點不清楚。希望下面的圖片能夠幫助你理清問題。

有兩個ID = 1的記錄,不同的用戶以及日期。我想要檢索的是具有ID = 1,USER = A,DATE = 2013-01-20的記錄,因爲它的日期早於第二條記錄(ID = 1,USER = A,DATE = 2013-01 -21)

我想爲ID = 2的三條記錄實現相同的效果。所需的記錄是ID = 2,USER = C,DATE = 2013年10月20日

基本上我想組這些記錄由它們的ID,然後從該分組,得到一個具有最低日期

data set + intended output

回答

3
SELECT id, user, date 
FROM OriginalData od 
WHERE date = (SELECT MIN(date) 
       FROM OriginalDate od1 
       WHERE od.id = od1.id) 
+0

完全按照OP要求:) – NullPointer

+0

謝謝!正是我需要的! – user571099

0
Select * from table_name where date in 
(select MIN(date) from table_name) 
+1

你的子查詢返回一個值。 –

+0

這不是他要求的。 –

+0

同意@ PM77-1上面的查詢只返回單行 – NullPointer

0

你TYO使用Group By子句Id屬性。

使用以下語法

select * from tab1 where (id, date) in (select id, min(date) from tab1 group by(id)) 
+1

只能在MySql中使用。 –

+0

你在其他平臺上測試過嗎? –

+1

我不需要。你會得到一個錯誤,你有字段(即,用戶和日期既不在'GROUP BY'也不聚合,只有MySql實現了'GROUP BY'擴展,嘗試使用SQL Server或Oracle等,參見http:// stackoverflow的.com /問題/ 12863928/SQL-組逐誤差不-A基團的由表達 –