SQL select 只有一项符合条件
SQL select only one item which meets condition
我的范围很窄table:DATA、ID、LAT、LNG、TIME。
(https://gyazo.com/52b268c00963ed12ba85c6765f40bf63)
而且我想 select 每个不同 ID 的最新数据。我正在使用
这样的查询
SELECT *
FROM name_of_table
WHERE TIME > my_given_time;
但它 select 完全是所有数据,而不仅仅是满足条件的每个不同 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;
感谢大家的帮助
试试这个:
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`;
我会这样做:
SELECT tt.* FROM tblTest tt
WHERE _ID IN (
SELECT TOP 1 _ID FROM tblTest WHERE ID = tt.ID ORDER BY TIME DESC
)
假设我在您的链接图片中找到的 _ID 是每一行的唯一标识符
这样的怎么样
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);
查询returns每个ID最大时间戳的数据值
ID DATA
----- ----
test 20
test2 10
我的范围很窄table:DATA、ID、LAT、LNG、TIME。 (https://gyazo.com/52b268c00963ed12ba85c6765f40bf63)
而且我想 select 每个不同 ID 的最新数据。我正在使用
这样的查询SELECT *
FROM name_of_table
WHERE TIME > my_given_time;
但它 select 完全是所有数据,而不仅仅是满足条件的每个不同 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;
感谢大家的帮助
试试这个:
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`;
我会这样做:
SELECT tt.* FROM tblTest tt
WHERE _ID IN (
SELECT TOP 1 _ID FROM tblTest WHERE ID = tt.ID ORDER BY TIME DESC
)
假设我在您的链接图片中找到的 _ID 是每一行的唯一标识符
这样的怎么样
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);
查询returns每个ID最大时间戳的数据值
ID DATA
----- ----
test 20
test2 10