0

私は、修理された携帯電話を追跡するプロジェクトに取り組んでいます。

selectステートメントで、重複するIMEI番号を見つけて、重複間のAddedDateが30日未満かどうかを確認したいと思います。言い換えれば、AddedDate が 30 日を超えている場合、重複する IMEI 番号を含めて、すべての電話を選択して一覧表示する必要があります。

十分に明確に説明したことを願っています。ありがとうございました。

その他の注意事項:

重複を見つけたサブセレクトの下に groupBy を含めてみましたが、if 条件を実装できませんでした。代わりに、すべての重複を動的テーブルに配置し、このテーブルに対して select ステートメントを使用するつもりでした。そうする前に、ここに質問を投稿することを考えました。

たとえば、DB_Phones には次の行があります。

ID - 追加日 - IMEI

1 - 01.10.2012 - 123456789012345

2 - 15.10.2012 - 987654321012345

3 - 2012 年 10 月 20 日 - 123456789012345

上記の表に基づいて、最後の重複 (ID# 3) が ID# 1 の行の 30 日後に追加されなかったため、2 行目 (ID# 2) のみをリストしたいと思います。 行が以下の場合:

ID - 追加日 - IMEI

1 - 01.10.2012 - 123456789012345

2 - 15.10.2012 - 987654321012345

3 - 2012 年 10 月 20 日 - 123456789012345

4 - 21.11.2012 - 123456789012345

次に、2 番目と 4 番目の行が返されます。30 日の条件が満たされている場合は、複製の 1 つ (最後のもの) だけを返す必要があります。

私はそれが今より理にかなっていることを願っています。再度、感謝します。

4

1 に答える 1

0

あなたが求めているものの推測:

SELECT
  r.*,
  (SELECT COUNT(*) FROM Repairs r2 WHERE r.IMEI = r2.IMEI
  AND r.ID != r2.ID) as NumberOfAllDuplicates,
  (SELECT COUNT(*) FROM Repairs r2 WHERE r.IMEI = r2.IMEI
  AND ABS(DATEDIFF(day, r.AddedDate, r2.AddedDate)) < 30
  AND r.ID != r2.ID) as NumberOfNearDuplicates
FROM
  Repairs r

これは、ID フィールドがあり、すべてが 1 つのテーブルに存在することに依存します。相関サブクエリでは、長いデータではあまり高速ではない場合があります。

于 2012-11-16T16:51:12.233 に答える