SQL只选择一个符合条件的项

时间:2017-04-25 15:54:48

标签: sql dashdb

我有一个非常狭窄的表:DATA,ID,LAT,LNG,TIME。 (https://gyazo.com/52b268c00963ed12ba85c6765f40bf63

我想为每个不同的ID选择最新的数据。我正在使用像

这样的查询
SELECT * 
  FROM name_of_table 
 WHERE TIME > my_given_time;

但是它选择了所有数据,而不仅仅是满足条件的每个不同id的数据。

有人可以帮我写一下这个问题吗?

感谢您的帮助。 :)

修改

我的工作查询的最终外观如下:

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;

感谢大家的帮助

3 个答案:

答案 0 :(得分:2)

这样的事情

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

答案 1 :(得分: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`;

答案 2 :(得分:0)

我会做这样的事情:

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

假设我在链接图片中找到的_ID是每个单独行的唯一标识符