select date, name, num
from
(
select date, name, num, max(num) over (partition by date) as max_num
from mytable
) analyzed
where num = maxnum
order by date;
SELECT t1.*
FROM yourTable t1
INNER JOIN
(
SELECT Date, MAX(Num) AS max_num
FROM yourTable
WHERE Date IN ('oct1', 'oct2')
GROUP BY Date
) t2
ON t1.Date = t2.Date AND t1.Num = t2.max_num
WHERE t1.Date IN ('oct1', 'oct2');
CREATE TABLE T(
Date VARCHAR(50),
Name VARCHAR(50),
Num INT
);
INSERT INTO T VALUES ('oct1','Bob',2);
INSERT INTO T VALUES ('oct2','Zayne',1);
INSERT INTO T VALUES ('oct1','Test',5);
INSERT INTO T VALUES ('oct2','Apple',7);
查询#1
SELECT *
FROM T t1
WHERE Num = (SELECT MAX(Num) FROM T tt WHERE t1.Date = tt.Date)
AND
t1.Date in ('oct1','oct2')
| Date | Name | Num |
| ---- | ----- | --- |
| oct1 | Test | 5 |
| oct2 | Apple | 7 |
5条答案
按热度按时间4ktjp1zp1#
当你要求一个标准的方法来做到这一点时:所有给出的答案都符合sql标准。标准sql中还有一种可能的方法是使用window函数。然而,从版本8开始,mysql中只提供了这一功能。
这只读取一次表,这可以(但不一定)加快查询速度。
ej83mcc02#
您可以在下面尝试使用相关子查询
oxf4rvwz3#
听起来你想要这个查询:
顺便说一下,您应该认真考虑在mysql的实际日期或日期时间列中存储适当的日期数据。似乎您现在只是在存储文本,这将很难处理。
6ss1mwsb4#
您可以尝试正确使用子查询
架构(mysql v5.7)
查询#1
db fiddle视图
bttbmeg05#
您可以使用如下所示的相关子查询
小提琴连杆