最終的に集計を行いたいのですが、
集計対象のデータの抽出と実際の集計のやり方がいまいちピンときません。
ご教示頂けますでしょうか。
テーブルはこうなっております。
*** test_table *****
id order_id price date
1 aaa 100 2009 4/1 00:00
2 aaa 200 2009 4/4 00:00
3 aaa 150 2009 4/9 00:00
4 aaa 400 2009 5/9 00:00
5 ccc 900 2009 3/1 00:00
6 ccc 500 2009 4/5 00:00
7 ccc 200 2009 4/7 00:00
8 www 100 2009 4/1 00:00
9 www 200 2009 4/9 00:00
1.order_idが同じものの中で一番若いdateが 2009/4/1 00:00-24:00 である order_id の取得
⇒1行目と8行目が該当するので、「aaa」 と 「www」 を取得。
2.1のorder_id で、dateが、2009/4/1 00:00 - 2009/4/30 24:00 の期間である price の合計値の取得
⇒order_id=aaaの時、1~3行目が該当するので、「450」、
order_id=wwwの時、8~9行目が該当するので、「300」を取得。
可能であれば、以上2つのことを1つのクエリで発行できるのかということも知りたいです。
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で日付ごと、月ごとってのも思いついたんですがコストが掛かりそうです。
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以前なら、一時表を使ったりと、事前準備が必要になります。
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
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- SQL Server ACCESSで3ファイルを結合して、表を作成するやり方を教えて下さい。 17 2022/08/15 20:34
- SQL Server ACCESSで複数テーブルを結合して、リストを作る方法を教えてください。 2 2022/08/12 19:32
- SQL Server ACCESSで表が作りたく、そのためのSQL文や設定方法を教えてください。 1 2022/08/15 12:28
- PHP php my adminより取り出したデータ表示 2 2022/06/15 11:56
- その他(データベース) カラム上の重複を削除するクエリを教えてください 3 2022/04/12 14:11
- Excel(エクセル) ¥マークを含むパスの処理について(マクロ、または関数) 2 2022/12/25 02:11
- Visual Basic(VBA) VBAで時間(00:00形式)を積算(足し算)したい 1 2022/11/15 17:04
- PostgreSQL 画像とカテゴリーを出力したいのですが、取得の条件を付ける方法がわかりません。 2 2022/05/01 18:03
- PHP PHP MySql ページング 2 2022/09/20 06:38
- 教えて!goo 質問するとここの回答者って 3 2022/10/24 09:58
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
SQLです。こんな感じですか?あ...
-
テーブル名が可変の場合のクエ...
-
#1062 - '0' は索引 'PRIMARY' ...
-
select *, `人口(男)`AND`人口(...
-
下記の問合せを行うクエリを、P...
-
うまくいきません教えてくださ...
-
東京23区を、皇居を中心とした...
-
SQLです。下記の問合せを行うク...
-
htmlコードで書かれた表にphpで...
-
無料なのに支払するのか!です...
-
【初歩】ラジオボタンをつかっ...
-
MySQLのエラーメッセージ(エラ...
-
sqlのエラー
-
テーブルのカラム構造だけをコ...
-
PhpMyAdminで作成して実行せよ...
-
下記の問合せを行うクエリを、P...
-
PHPとMySQLを使った掲示板の作り方
-
SQLでカラムを追加し、条件に合...
-
MySQL NULLだけをカウントして...
-
2023年10月25日現在のMAMP ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
テーブル名が可変の場合のクエ...
-
#1062 - '0' は索引 'PRIMARY' ...
-
SQLでカラムを追加し、条件に合...
-
データベースの接続に失敗して...
-
東京23区を、皇居を中心とした...
-
BGMを教えてほしいです!
-
mysqlのupdate構文についての質...
-
エラー 1068 (42000): 複数の主...
-
下の画像はSQLの4大命令の性質...
-
htmlコードで書かれた表にphpで...
-
mysqlでunixtimeによる日付範囲...
-
SQLについて教えて下さい。 SEL...
-
うまくいきません教えてくださ...
-
無料なのに支払するのか!です...
-
【初歩】ラジオボタンをつかっ...
-
MySQLでcreateが使えない MySQL...
-
MySQLのテーブル作成でハイフン...
-
SQLで日付別のIDを生成するには
-
MySQLでエラーがでて前に進めま...
-
mysqlがインストールされている...
おすすめ情報