[英]How to select min date group by name with repeated ids
我有一个表,其中包含id
, name
, date
和value
我的桌子是:
id name date value
---|------|------------|-------------
1 | john | 01/03/2017 | 399
1 | john | 02/03/2017 | 244
1 | paul | 01/03/2017 | 555
1 | paul | 02/03/2017 | 313
2 | john | 03/04/2017 | 433
2 | john | 04/04/2017 | 651
2 | paul | 05/04/2017 | 657
2 | paul | 06/04/2017 | 131
3 | john | 03/05/2017 | 656
3 | john | 24/05/2017 | 543
3 | paul | 01/05/2017 | 114
3 | paul | 02/05/2017 | 966
我需要按名称及其值选择最小日期组。
我需要得到这个:
id name date value
---|------|------------|-------------
1 | john | 01/03/2017 | 399
1 | paul | 01/03/2017 | 555
2 | john | 03/04/2017 | 433
2 | paul | 05/04/2017 | 657
3 | john | 03/05/2017 | 656
3 | paul | 01/05/2017 | 114
我已经尝试过这个mysql查询:
SELECT a.*
FROM mytable a
INNER JOIN
(
SELECT name, MIN(date) mindate
FROM mytable
GROUP BY name
) b ON a.name = b.name
AND a.date= b.mindate
ORDER BY a.id
您可能想要这样:
SELECT a.*
FROM mytable a
INNER JOIN
(
SELECT id, name, MIN(date) mindate
FROM mytable
GROUP BY id, name
) b ON a.id = b.id
AND a.name = b.name
AND a.date= b.mindate
ORDER BY a.id
因为预期结果在给定ID中具有每个名称的最短日期。
而且,只有在每个ID和名称的最小值都只有一行的情况下,这才会产生正确的结果。
尝试这个:
Select id, name, min(date), value
from mytable
group by id, name, value
该字段的数据类型是什么,MySql友好日期的格式为“ yyyy-mm-dd HH:MM:SS”。 我猜该列的数据类型为varchar或text。 首先将该字符串转换为日期STR_TO_DATE(t.datestring,'%d /%m /%Y'),然后从中选择最小值并将其格式化为所需格式。 查询将是:
select t.id,t.name,DATE_FORMAT(MIN(STR_TO_DATE(t.date,'%d/%m/%Y')), '%d/%m/%Y') as date,t.value
from myTable t group by t.id,t.name
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.