0

次のことを行う SQL ステートメントを作成しようとしていますが、明らかに失敗しています。

ビューからすべての情報を選択し、次の基準に基づいてフィルタリングします。

  1. 指定されたフィールド「customer_number」がテーブル内の任意の場所に存在する場合
  2. 次に、過去 30 日以内に重複がないか確認します
  3. 次に、customer_number でグループ化されたすべての個別の customer_numbers を出力します
  4. アイテムが何回繰り返されたかを確認できるようにカウントします。

したがって、今日を現在の日付として使用すると、テーブルに次のデータエントリがあったと言えます。

customer_number, date
111111, 2013-01-01
111111, 2013-05-05
222222, 2013-01-07
222222, 2013-03-19
333333, 2013-05-15
333333, 2013-05-30

SELECT ステートメントで次のものが返されるようにします。

customer_number, date, count
111111, 2013-01-01, 2
333333, 2013-05-15, 2

また、顧客 222222 は、過去 30 日間表示されていないため、表示されません。

これは、私がこれを理解しようとしている限りです。現在の月のデータのみを返します。

SELECT *, COUNT(customer_number) 
FROM red_flags 
WHERE dealer_id = '75' AND date BETWEEN CURDATE() - INTERVAL 30 DAY AND CURDATE() 
GROUP BY customer_number 
HAVING COUNT(customer_number) > 1

私は、クエリでこれを行う方法、またはこれが可能であるかどうかを理解しようとして頭を溶かしてきました。

4

2 に答える 2

1

JOINを使用してそれを行う方法は次のとおりです

select r.customer_number, count(*) ct, min(date) minDate
from red_flags r
join (select distinct customer_number
      from red_flags
      where dealer_id = '75'
      and date between CURDATE() - INTERVAL 30 DAY and CURDATE()) x
ON r.customer_number = x.customer_number
group by customer_number
HAVING ct > 1

SQLFIDDLE

于 2013-05-31T19:56:42.817 に答える