[英]Select rows with highest value in one column in SQL
在MySQL中,我试图为每个“ foreign_id”选择一行。 它必须是“时间”列(其类型为DATETIME)中具有最高值的行。 您能帮我看看SQL SELECT语句的外观如何吗? 谢谢! 这真是太好了! 我已经尝试了几个小时才能找到解决方案:(
这是我的桌子:
primary_id | foreign_id | name | time
----------------------------------------------------
1 | 3 | a | 2017-05-18 01:02:03
2 | 3 | b | 2017-05-19 01:02:03
3 | 3 | c | 2017-05-20 01:02:03
4 | 5 | d | 2017-07-18 01:02:03
5 | 5 | e | 2017-07-20 01:02:03
6 | 5 | f | 2017-07-18 01:02:03
结果如下所示:
primary_id | foreign_id | name | time
----------------------------------------------------
3 | 3 | c | 2017-05-20 01:02:03
5 | 5 | e | 2017-07-20 01:02:03
我试图按时间排序中间结果(降序),然后使用LIMIT 1仅选择第一行。但是像这样,我无法为每个foreign_id获得一行。
另一种尝试是先按时间顺序排列中间结果(降序),然后再按GROUP BY foreign_id。 但是GROUP BY语句似乎是在 ORDER BY语句之前执行的(因此我收到了primary_id为1和4的行,而不是3和5的行)。
尝试这个
SELECT DISTINCT *
From my_table A
INNER JOIN (SELECT foreign_id, Max(time) AS time FROM my_table GROUP BY foreign_id) B
ON A.foreign_id = B.foreign_id AND A.time = B.time
只需添加一些数据样本来分析特殊情况
CREATE TABLE Table1
(`primary_id` int, `foreign_id` int, `name` varchar(1), `time` datetime)
;
INSERT INTO Table1
(`primary_id`, `foreign_id`, `name`, `time`)
VALUES
(1, 3, 'a', '2017-05-18 01:02:03'),
(2, 3, 'b', '2017-05-19 01:02:03'),
(3, 3, 'c', '2017-05-20 01:02:03'),
(7, 3, 'H', '2017-05-20 01:02:03'),
(4, 5, 'd', '2017-07-18 01:02:03'),
(5, 5, 'e', '2017-07-20 01:02:03'),
(6, 5, 'f', '2017-07-18 01:02:03')
;
http://sqlfiddle.com/#!9/38947b/6
select d.primary_id, d.foreign_id, c.name, d.time
from table1 c inner join (
select max(b.primary_id) primary_id, a.foreign_id, a.time
from table1 b inner join
( select foreign_id, max(time) time
from table1
group by foreign_id) a
on a.foreign_id = b.foreign_id and a.time=b.time
group by a.foreign_id, a.time ) d
on c.primary_id=d.primary_id
在过去的日子里,您会将其编码为相关子查询:SELECT * FROM Table1 o WHERE primary_id =(SELECT min(m.primary_id)FROM Table1 m WHERE m.time =(SELECT max(i.time)FROM Table1 i在哪里o .foreign_id = i.foreign_id))
额外的子查询处理重复的foreign_id和时间值的情况。 如果确定每个foreign_id的时间都是唯一的,则可以省略中间子查询。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.