2017-02-14 8 views
3

私はdatetime、value、およびuserを持つテーブルを持っています。 このテーブルには、同じdatetimeでは、ユーザーと値が異なる複数の行があります。SQL - 選択する重複値を選択してください

対応する値とユーザーで別個のdatetimeを選択します。 異なるユーザーで複数の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 

で終わるだろうが、私は私の人生のために行う方法を動作することはできませんそれ!

大変助かりました。

おかげ

+0

uは日付2/1/17のための80のGTましたか? –

+0

申し訳ありませんがタイプミス、90を意味します。更新されます。 –

答えて

2

非常に単純ではありません! 'User1''User3'からの入力があった場合でも、これは常に、'User2'からの入力の優先順位を決定しますウィンドウ関数と共通テーブル式

; 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 
+0

これは、 'User2'> 'User1'という、より一般的な設定ではorder by節が異なるという事実を利用しています。 –

0
DECLARE @T as table 
(
    [DateTime] nvarchar(100), 
    VALUE INT, 
    [USER] VARCHAR(32) 
) 

INSERT INTO @T 
VALUES 
('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') 

SELECT t.[DateTime], t.VALUE, t.[USER] 
FROM @T t 
    JOIN (
     SELECT [DateTime], MAX([USER]) AS [USER] 
     FROM @T 
     GROUP BY [DateTime] 
    ) u ON u.[DateTime] = t.[DateTime] AND u.[USER] = t.[USER] 
ORDER BY VALUE DESC 
0
;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 
2

を使用します。

;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 

rextester http://rextester.com/AZVA85684

結果:

+----------+-------+-------+----+ 
| DateTime | value | user | rn | 
+----------+-------+-------+----+ 
| 1/1/17 | 90 | User2 | 1 | 
| 2/1/17 | 80 | User2 | 1 | 
| 3/1/17 | 10 | User1 | 1 | 
+----------+-------+-------+----+ 
関連する問題