• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:煩雑な集計のクエリ)

煩雑な集計クエリの解決方法とデータ抽出の手順

このQ&Aのポイント
  • 煩雑な集計を行うためには、データ抽出と集計の手順を理解する必要があります。
  • 具体的には、同じorder_idの中で一番若いdateが特定の期間に該当するデータを抽出し、それぞれのorder_idごとにpriceを合計します。
  • また、2つの操作を1つのクエリで行いたい場合は、サブクエリや集約関数を使用することができます。

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

  • ベストアンサー
  • n09430515
  • ベストアンサー率52% (11/21)
回答No.3

> 2.1のorder_id で、dateが、2009/4/1 00:00 - 2009/4/30 24:00 の期間である price の合計値の取得 この2の取得を「dateが、2009/4/1 00:00 - 2009/4/30 24:00 の期間である order_id 毎の price の合計値の取得」にして1の取得結果とorder_idどうしでJOINする、と考えれば煩雑ではないでしょう。 1… select order_id, min(date) from test_table group by order_id having min(date) >= '2009 4/1 00:00' and min(date) < '2009 4/2 00:00' 2… select order_id, sum(price) from test_table where date >= '2009 4/1 00:00' and date < '2009 5/1 00:00' group by order_id

その他の回答 (2)

回答No.2

ここのカテゴリ通り、RDBMSはMySQLなのでしょうか? バージョンは? >1   aaa   100   2009 4/1 00:00 年月の間に空白があるのは、記載ミスですか? date列のデータ型は、何ですか?もし、datetimeであれば年月の間に空白は許されないし、varchar等を使っているのですか?もしそうであれば、年月日などのデータ形式はどうなっているのですか? >一番若いdateが 2009/4/1 00:00-24:00 これも記載ミスでしょうか? それとも、00:00と24:00という、同じ意味の異なる表現が存在するのですか? >可能であれば、以上2つのことを1つのクエリで発行できるのか MySQL 4.1以降であれば、サブクエリが実装されているので、1文で可能です。MySQL 4.0以前なら、一時表を使ったりと、事前準備が必要になります。

  • mindatg
  • ベストアンサー率48% (110/227)
回答No.1

ぱっと、思いついたので合ってるかどうかは知らんですが SELECT *, SUM(price) FROM test_table GROUP BY order_id WHERE (date BETWEEN '2009 4/1 00:00' AND '2009 4/1 24:00') /* WHERE DATE_TRUNC('day',date) = '2009 4/1' */ /* MySQLだとTRUNC('day',date)かな? */ 参考程度に。 >以上2つのことを1つのクエリで発行できるのか 余裕っす likeで日付ごと、月ごとってのも思いついたんですがコストが掛かりそうです。

関連するQ&A