如果我的表格有3列:
Date | Name | Num
oct1 | Bob | 2
oct2 | Zayne | 1
oct1 | Test | 5
oct2 | Apple | 7
我要检索Num
是MAX
,
WHERE Date = oct1 or Date = oct2
所以我希望结果是:
oct1 Test 5
oct2 Apple 7
最好使用MYSQL。但是也给出SQL答案。谢谢。
答案 0 :(得分:2)
您可以在下面使用相关子查询尝试
select * from tablename a
where num in (select max(num) from tablename b where a.date=b.date)
and date in ('oct1', 'oct2')
答案 1 :(得分:1)
您可以尝试正确使用子查询
模式(MySQL v5.7)
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 |
答案 2 :(得分:1)
听起来您想要此查询:
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');
顺便说一句,您应该认真考虑将适当的日期数据存储在MySQL的实际日期或日期时间列中。看来您现在只是存储文本,很难使用。
答案 3 :(得分:0)
您可以如下使用关联子查询
generating Query
SELECT *
FROM T t1
WHERE Num = (SELECT MAX(Num) FROM T t2 WHERE t2.Date = t1.Date)
答案 4 :(得分:0)
在您寻求标准方法的地方:到目前为止给出的所有答案均符合SQL标准。标准SQL中的另一种可能方法是使用窗口函数。但是,只有MySQL从版本8开始才具有此功能。
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;
这只会读取一次表,这可以(但不一定可以)加快查询速度。