2017-05-15 3 views
0

データは次のようになりますように:1列の値を除き、個別の行を取得します

date_time  | amount| user|group 
--------------------- 
5/15/2017 6:30 | 250| a | abc 
5/15/2017 6:30 | 250| a | def 
5/15/2017 5:30 | 50| a |abc 
5/15/2017 5:30 | 50| a |def 
5/15/2017 4:30 | 50| a |abc 
5/15/2017 4:30 | 50| a |def 
5/15/2017 5:20 | 50| b |abc 
5/15/2017 5:20 | 50| b |def 
5/15/2017 5:18 | 50| b |abc 
5/15/2017 5:18 | 50| b |def 

望ましい結果:日時列を考慮しないと、グループ全体のために異なる値を持つ

date_time| amount | user | group 
--------------------- 
5/15/2017 4:30 | 50| a |abc 
5/15/2017 4:30 | 50| a |def 
5/15/2017 6:30 | 250| a | abc 
5/15/2017 6:30 | 250| a | def 
5/15/2017 5:18 | 50| b |abc 
5/15/2017 5:18 | 50| b |def 

結果この区別はdatetimeには適用しないでください。

あなたは以下のように量、ユーザー、グループでROW_NUMBERとパーティションを使用することができます
+0

この質問は明確ではありません。詳細をお聞かせください。 – jimmy8ball

答えて

0
;With cte(date_time, amount,[user],[group]) 
AS 
(
SELECT '5/15/2017 6:30' , 250, 'a' , 'abc' Union all 
SELECT '5/15/2017 6:30' , 250, 'a' ,'def' Union all 
SELECT '5/15/2017 5:30' , 50, 'a' ,'abc' Union all 
SELECT '5/15/2017 5:30' , 50, 'a' ,'def' Union all 
SELECT '5/15/2017 4:30' , 50, 'a' ,'abc' Union all 
SELECT '5/15/2017 4:30' , 50, 'a' ,'def' Union all 
SELECT '5/15/2017 5:20' , 50, 'b' ,'abc' Union all 
SELECT '5/15/2017 5:20' , 50, 'b' ,'def' Union all 
SELECT '5/15/2017 5:18' , 50, 'b' ,'abc' Union all 
SELECT '5/15/2017 5:18' , 50, 'b' ,'def' 
) 

SELECT date_time 
    ,amount 
    ,[user] 
    ,[group] 
FROM (
    SELECT * 
     ,ROW_NUMBER() OVER (
      PARTITION BY amount 
      ,[user] 
      ,[group] ORDER BY amount 
       ,[user] 
      ) seq 
    FROM cte 
    ) dt 
WHERE dt.seq = 1 
ORDER BY [user] 

出力されます:

date_time amount user group 
-------------------------------- 
5/15/2017 4:30 50 a abc 
5/15/2017 5:30 50 a def 
5/15/2017 6:30 250 a abc 
5/15/2017 6:30 250 a def 
5/15/2017 5:18 50 b abc 
5/15/2017 5:18 50 b def 
0

select top 1 with ties * from YourdateTable 
    order by row_number() over (partition by amount, [user], [group] order by amount, [user], [group]) 

出力:以下

+-------------------------+--------+------+-------+ 
|  date_time  | amount | user | group | 
+-------------------------+--------+------+-------+ 
| 2017-05-15 05:30:00.000 |  50 | a | abc | 
| 2017-05-15 04:30:00.000 |  50 | a | def | 
| 2017-05-15 05:20:00.000 |  50 | b | abc | 
| 2017-05-15 05:18:00.000 |  50 | b | def | 
| 2017-05-15 06:30:00.000 | 250 | a | abc | 
| 2017-05-15 06:30:00.000 | 250 | a | def | 
+-------------------------+--------+------+-------+ 
0
SELECT MIN(date_time) AS date_time, amount, [user], [group] 
FROM MyTable 
GROUP BY [user], amount, [group]; 

上記のデータから、あなたが選択した日付は同じではありません。MIN()は、GROUP BYにない日付を選択するために使用されました。

関連する問題