• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:SQL カウント 以上 以下)

SQLで特定条件のデータを抽出する方法

このQ&Aのポイント
  • SQLを使用して、指定した日付範囲から3回以上、4回以下の重複データを抽出する方法を教えてください。
  • 現在、日付の範囲と3回以上の条件でデータを抽出することはできましたが、4回以下の条件の追加が上手くできません。
  • 以下のクエリを使用して、日付の範囲から3回以上のデータを抽出することができますが、4回以下の条件を追加する方法がわかりません。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.3

テーブルは1つですね。 では、まず、日付を指定したmain_id毎の件数を出してみて下さい。 SELECT main_id ,count(main_id) as count_main_id FROM テーブル名 where 日時 between '2017-08-01' and '2017-08-10' GROUP BY main_id ここまで、大丈夫なら、 件数で絞ってみましょう。 select main_id from ( SELECT main_id ,count(main_id) as count_main_id FROM テーブル名 where 日時 between '2017-08-01' and '2017-08-10' GROUP BY main_id ) tb1 where count_main_id between 3 and 4 ところで、 テーブル名のユニークキーは何ですか?

losloson
質問者

お礼

失礼しました。うまく作成できました。

その他の回答 (2)

回答No.2

SQL内に『old_テーブル名』と『テーブル名』という2つのテーブルが登場していますが、 これらの関係が明らかになっておらず、何かしたいのかがイマイチ分かりません。

losloson
質問者

お礼

間違えました日付範囲はうまくいっていますが、出現回数が上手くいかないです。

losloson
質問者

補足

失礼しました SELECT * FROM テーブル名 where 日時 between '2017-08-01' and '2017-08-10' AND (main_id) in (SELECT main_id FROM テーブル名 GROUP BY main_id HAVING (COUNT(main_id) >= 3 AND COUNT(main_id) <= 4)); このような形になりますが、そもそも日付範囲をしてから同じ値の出現回数をみていきたいのですが、日付範囲自体がまだうまくいっていないみたいです

回答No.1

SELECT * FROM old_テーブル名 where 日時 between '2017-08-01' and '2017-08-10' AND (main_id) in (SELECT main_id FROM テーブル名 GROUP BY main_id HAVING (COUNT(main_id) >= 3 AND COUNT(main_id) <= 4)); ではどうでしょう?(テスト環境が無いので試していません)

losloson
質問者

お礼

失礼しました。そもそも上手くいっていたのは日付までで 回数の処理はうまくいってませんでした

losloson
質問者

補足

ご回答ありがとうございます。 うまくいかないみたいです、、、、、