sql-server - 避免基于两个字段的表重复的最佳 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 |
非常感谢!
解决方案
您的数据不是特别适合所需的输出,将“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
推荐阅读
- css - 来自 MOBI KindleGen 的 iPad kindle 的图像 CSS 不变
- php - 如何在不使我的网站崩溃的情况下使用 curl?
- oracle - dbms_sql.define_column_long 过程抛出 ORA-00932:不一致的数据类型:预期的 CHAR 得到 LONG BINARY
- oracle - 如何在plsql中的游标for循环中分离借方和贷方
- python - 在python代码中导入时找不到模块robot.api
- r - R循环到新数据框摘要加权
- sql-server - 转到 MSSQL 连接
- c# - 压缩分组的 IObservable
- angular - 角动画只被触发一次
- linux-kernel - 自定义构建的内核在 Centos 7 上生成不可引导的 initramfs