2017-04-25 46 views
-1

我有一個非常窄的表格:DATA,ID,LAT,LNG,TIME。 (https://gyazo.com/52b268c00963ed12ba85c6765f40bf63SQL只選擇一個符合條件的項目

我想爲每個不同的ID選擇最新的數據。我使用的查詢像

SELECT * 
    FROM name_of_table 
WHERE TIME > my_given_time; 

但它選擇爲每個不同的ID滿足條件TOTALLY所有提交的數據,而不僅僅是數據。

有人能幫我寫下查詢嗎?

謝謝你的幫助。 :)

編輯

我的工作查詢的最終外觀看起來像:

SELECT * FROM (SELECT * FROM (SELECT ROW_NUMBER() OVER (PARTITION BY ID ORDER BY TIME DESC) AS ROWNUMBER, * FROM my_table) WHERE ROWNUMBER = 1) WHERE TIME > my_time; 

謝謝大家的幫助

+1

您正在使用哪種RDBMS? – Strawberry

+0

@Strawberry我在Bluemix上使用DashDB – WutchZone

回答

1

一個唯一的標識符怎麼樣像這樣

SELECT ID, DATA 
FROM (
SELECT ROW_NUMBER() OVER (PARTITION BY ID ORDER BY TIME DESC) AS ROWNUMBER, ID, DATA 
FROM name_of_table) 
WHERE ROWNUMBER = 1; 

對於這些僞記錄

INSERT INTO name_of_table (ID, TIME, DATA) VALUES('test',1230,16); 
INSERT INTO name_of_table (ID, TIME, DATA) VALUES('test2',1235,10); 
INSERT INTO name_of_table (ID, TIME, DATA) VALUES('test',1234,20); 

該查詢返回每個ID的最大時間戳的數據值

ID DATA 
    ----- ---- 
    test 20 
    test2 10 
+0

它幾乎可以正常工作!我只是小小的修改你的查詢(即編輯)。謝謝<3 – WutchZone

+0

很高興幫助您找到適合您的解決方案!請注意,實際上不需要最外層的SELECT按時間過濾。考慮將條件「WHERE ROWNUMBER = 1」更改爲「WHERE ROWNUMBER = 1 AND TIME> my_given_time」,而不是簡單化。 – ptitzler

0

試試這個:

SELECT a.* 
FROM `sometable` a 
JOIN (SELECT MAX(TIME) AS `max_time`,`ID` FROM `sometable` group by `ID`) b 
ON b.`ID` = a.`ID` AND a.`TIME` = b.`max_time`; 
+0

哦,只需編輯它即可。我會做... – Strawberry

+0

@SloanThrasher我不知道我是否寫錯了。因此,我應該用我自己的「變量」來取代一切? – WutchZone

+0

不是變量,而是後面抽動的列和表名, –

0

我會做這樣的事情:

SELECT tt.* FROM tblTest tt 
WHERE _ID IN (
    SELECT TOP 1 _ID FROM tblTest WHERE ID = tt.ID ORDER BY TIME DESC 
) 

假設_ID,我在你的鏈接圖片發現是每個單排

+0

我複製了它,並且被數據庫拋出了一個錯誤:**在處理「_」附近的條件編譯指令時發生錯誤。原因代碼=「7」。 SQLSTATE = 428HV ** – WutchZone

相關問題