我在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
谢谢
您可以执行以下操作:
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