SQL-选择要选择的重复值
我有一个带有日期时间、值和用户的表。 此表在同一日期时间有多行,但用户和值不同 我希望选择具有相应值和用户的distinct datetime。 如果存在不同用户的重复日期时间,则应优先考虑user2输入的值 Table 1 ----------------- DateTime| Value| User --------|---------|--------- 1/1/17 | 10| User1 2/1/17 | 30| User1 3/1/17 | 10| User1 1/1/17 | 90| User2 2/1/17 | 80| User2 因此,从上面来看,我将以 1/1/17 | 90| User2 2/1/17 | 80| User2 3/1/17 | 10| User1 我相信有一个简单的答案,但我不能为我的生活想出如何做到这一点 非常感谢您的帮助SQL-选择要选择的重复值,sql,sql-server,Sql,Sql Server,我有一个带有日期时间、值和用户的表。 此表在同一日期时间有多行,但用户和值不同 我希望选择具有相应值和用户的distinct datetime。 如果存在不同用户的重复日期时间,则应优先考虑user2输入的值 Table 1 ----------------- DateTime| Value| User --------|---------|--------- 1/1/17 | 10| User1 2/1/17 | 30| User1 3/1/
谢谢不太简单!使用窗口函数和公共表表达式
; with x as (
select [DateTime], value, [User], row_num = row_number() over(partition by [DateTime] order by [User] desc) from Table1
)
select x.* from x where row_num = 1
这将始终优先考虑来自“User2”的输入,即使有来自“User1”和“User3”的输入 雷克斯测试仪 结果:
+----------+-------+-------+----+
| DateTime | value | user | rn |
+----------+-------+-------+----+
| 1/1/17 | 90 | User2 | 1 |
| 2/1/17 | 80 | User2 | 1 |
| 3/1/17 | 10 | User1 | 1 |
+----------+-------+-------+----+
17年2月1日的u gt 80是怎么回事?对不起,错别字,应该是90。将更新。这利用了“User2”大于“User1”这一事实,在更一般的设置中,orderby子句会有所不同。
;with cte
as
(
select
*,
row_number() over (partition by date order by replace(user,'user','') desc) as rownum
from
#temp
)
select * from cte where rownum=1
;with cte as (
select *
, rn = row_number() over (
partition by [DateTime]
order by (case when [user] = 'User2' then 0 else 1 end) asc
)
from t
)
select *
from cte
where rn=1
+----------+-------+-------+----+
| DateTime | value | user | rn |
+----------+-------+-------+----+
| 1/1/17 | 90 | User2 | 1 |
| 2/1/17 | 80 | User2 | 1 |
| 3/1/17 | 10 | User1 | 1 |
+----------+-------+-------+----+