提问者:小点点

如何按“重复”字段中的最低值分组


我在mysql中有一个查询返回如下所示的resultset

ID1     ID2     string      date
14071   3031324 string 1    2016-08-10 21:29:39
14071   3054168 string 2    2016-08-10 21:33:26
14071   3054169 string 3    2016-08-10 21:33:26
14074   2938174 string 2    2016-08-10 21:14:48
14074   2938175 string 3    2016-08-10 21:14:48
14074   2938176 string 1    2016-08-10 21:14:48
14093   2954386 string 2    2016-08-10 21:17:22
14093   3035338 string 3    2016-08-10 21:30:19

我需要对此进行过滤,以便仅对每个ID1的ID2最低的LIN进行ruturn

14071   3031324 string 1    2016-08-10 21:29:39
14074   2938174 string 2    2016-08-10 21:14:48
14093   2954386 string 2    2016-08-10 21:17:22

谢谢


共2个答案

匿名用户

您可以执行以下操作:

select *
from t
where (id1, id2) in (select id1, min(id2) from t group by id1)

匿名用户

您可以根据需要rank()对记录进行分区,并仅选择最低级别:

SELECT ID1, ID2, string, date
FROM (
    SELECT ID1, ID2, string, date, RANK() over ( PARTITION BY ID1, ORDER BY ID2 ASC ) rank
    FROM {your_table}
)
WHERE rank = 1