2016-11-02 9 views
1

SQL Serverを使用して、同じ日にコードxを持つすべての行を選択したいとします。
例:レコードのIDは同じで、同じ日付で、同じコード(コードx)でなければなりません。 私はこれらの行だけを選択したいと思います(重複するIDを持つ1行だけでなく、重複する両方の行)。表示されるSQL Server 3つの条件に基づいてすべての重複データを選択して表示

ID 3 10/1/16 Code X 
ID 3 10/1/16 Code X 

私が試してみました:

SELECT ID,Date,CODE 
FROM (SELECT ID,Date,CODE 
     FROM my table 
     WHERE code = 'x' and date between '10-01-2016' and '10-31-2016' 
     GROUP BY ID,date,code 
     HAVING 
     COUNT(*) > 1 
    ) as T1 
JOIN 
    my table as T2 on 
    T1.ID = T2.ID and 
    T1.Date = T2.Date and 
    T1.code = T2.code 
where code ='x' and date between '10-01-2016' and '10-31-2016' 
group by ID,date,code 
+0

申し訳ありませんが、私は提出する前にはるかに良いフォーマットに見えました。 – Crow

+0

'date'フィールドのデータ型とサイズは?おそらくクエリープロセッサがそれを処理しますが、 'date'をフィールド名として使用しても非常に良いとは言えません。 – lit

+0

@ lititistフィールドは実際にはサービス日付です。 2016-10-16 00:00:00.000 – Crow

答えて

1
select  * 

from  (SELECT  count  (*) over (partition by ID,date)     as group_records 
         ,dense_rank () over (order by  ID,date)     as group_id 
         ,row_number () over (partition by ID,date order by getdate()) as row_within_group 
         ,t.* 

      FROM  mytable t 

      WHERE  code = 'x' 
        and date between '10-01-2016' and '10-31-2016' 
      ) t 

where  group_records > 1 

order by group_id 
      ,row_within_group 
; 
0

を私が正しくあなたの質問を得た場合は、このクエリを使用することができます。

select * from my_table where `ID` in 
     (select `ID` from my_table group by `ID`,`Date`,`CODE` having count(*)>1) 
    AND `Date` in 
     (select `Date` from my_table group by `ID`,`Date`,`CODE` having count(*)>1) 
    AND `CODE` in 
     (select `CODE` from my_table group by `ID`,`Date`,`CODE` having count(*)>1) 

Iこの回答が役に立ったら嬉しいです:)

+0

ありがとうございます。日付とコードの基準を2つ以上のステートメントに追加するだけですか? – Crow

+0

私はあなたのポイントを得ることができませんでした、私に例を与えるか、詳細を説明してください... –

+0

ここでcode = 'x'と'10 -01-2016 'と'10 -31-2016'の間の日付 – Crow

関連する問題