例如表中数据如下
Id name age
1 aa 18
2 bb 19
3 aa 20
4 aa 21
5 cc 22
6 dd 23
当发现多行记录的某一个字段相同,即上表中多行的name相同,则根据某个条件刷选出其中一行,例如当名字相同时选择年龄为20岁的(表中最多只出现一个20岁),如果没有20岁的就就选择这些行中年龄最小的
如果name都唯一,则直接查询出原表记录
如上表,最终我要查询出的记录为
Id name age
3 aa 20
2 bb 19
5 cc 22
6 dd 23
求教这条sql
1 个解决方案
#1
SELECT * FROM(
SELECT *,
ROW_NUMBER()OVER(PARTITION BY name ORDER BY
CASE WHEN age=20 THEN 0 ELSE 1 END,age
)RN
FROM TB
)T
WHERE RN=1
#1
SELECT * FROM(
SELECT *,
ROW_NUMBER()OVER(PARTITION BY name ORDER BY
CASE WHEN age=20 THEN 0 ELSE 1 END,age
)RN
FROM TB
)T
WHERE RN=1