首页 > 解决方案 > 避免基于两个字段的表重复的最佳 SQL 语句,但也列出其余字段

问题描述

避免在基于两个字段的表上重复但同时列出其余字段的最佳 SQL 语句是什么?(在 sql server 中)我想要一些类似于:

SELECT DISTINCT[YEAR, USER_ID], OTHER_USER_ID, ETC 
FROM USERS
用户身份 OTHER_USER_ID
2020 ID_1 ID_256
2020 ID_1 ID_987
2020 ID_2 ID_357
2020 ID_2 ID_159
2021 ID_1 ID_456

期望的结果:

用户身份 OTHER_USER_ID
2020 ID_1 ID_256
2020 ID_2 ID_357
2021 ID_1 ID_456

非常感谢!

标签: sql-server

解决方案


您的数据不是特别适合所需的输出,将“ID”值作为包含“ID_”的字符串有点设计缺陷,user_Id 列是否包含不是用户 ID 的值?

您可以使用简单的行号过滤器完成您需要的工作,但它依赖于远非理想的字符串排序,您确实需要一个额外的整数来指示正确的排序,结果最终将与提供的数据集模棱两可。

此外,您应该尽可能避免使用关键字(年份)作为列名!

select year, user_id, other_user_id from (
    select year, user_id, other_user_id, row_number() over (partition by year, user_id order by year, user_id) rn
    from t
)x
where rn=1

推荐阅读