- ベストアンサー
SQLで特定条件のデータを抽出する方法
- SQLを使用して、指定した日付範囲から3回以上、4回以下の重複データを抽出する方法を教えてください。
- 現在、日付の範囲と3回以上の条件でデータを抽出することはできましたが、4回以下の条件の追加が上手くできません。
- 以下のクエリを使用して、日付の範囲から3回以上のデータを抽出することができますが、4回以下の条件を追加する方法がわかりません。
- みんなの回答 (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 ところで、 テーブル名のユニークキーは何ですか?
その他の回答 (2)
- linuxorfe
- ベストアンサー率50% (1/2)
SQL内に『old_テーブル名』と『テーブル名』という2つのテーブルが登場していますが、 これらの関係が明らかになっておらず、何かしたいのかがイマイチ分かりません。
お礼
間違えました日付範囲はうまくいっていますが、出現回数が上手くいかないです。
補足
失礼しました 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)); このような形になりますが、そもそも日付範囲をしてから同じ値の出現回数をみていきたいのですが、日付範囲自体がまだうまくいっていないみたいです
- chie65536(@chie65535)
- ベストアンサー率44% (8740/19838)
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)); ではどうでしょう?(テスト環境が無いので試していません)
お礼
失礼しました。そもそも上手くいっていたのは日付までで 回数の処理はうまくいってませんでした
補足
ご回答ありがとうございます。 うまくいかないみたいです、、、、、
お礼
失礼しました。うまく作成できました。