繁体   English   中英

如何通过重复的ID按名称选择最小日期组

[英]How to select min date group by name with repeated ids

我有一个表,其中包含idnamedatevalue

我的桌子是:

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

SQLFiddle

因为预期结果在给定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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM