• ベストアンサー

時間により単価が変わるログ集計について

MySQL5で、下記の売上単価 A と売上回数 B より、 id毎に売上金額 C を算出する事は可能でしょうか? ■売上単価 A id|daytime|money 1 |2007/4/1 12:00 |100円 1 |2007/4/1 12:29 |1円 ■売上回数 B id|daytime|money 1 |2007/4/1 12:15 |100回 1 |2007/4/1 12:30 |1回 ■売上金額 C id|money 1 |2007/4/1|10001円 AとBで異なる会社の為、 仕方なくこのようなテーブル構成になってしまいます(><)

  • php4
  • お礼率42% (373/888)
  • MySQL
  • 回答数3
  • ありがとう数3

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

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

#1回答者です。 質問内容が曖昧なので、以下の通りに推測します。 単価が次々と変わり、その時点の単価(売上日時以前で、最も新しい日時の単価)で算出するものとします。 売上金額は、id+日付毎に集計するものとします。 【SQL例】 select t.id,date(k.日時) as 日付,sum(単価*回数) as 売上 from 売上単価 as t,売上回数 as k where t.id=1 and (t.id,t.日時) in(select id,max(日時) from 売上単価 where id=k.id and 日時<=k.日時 group by id ) group by t.id,日付 ;

php4
質問者

お礼

質問が少し間違っておりました。すみません。 売上回数ではなく、売上記録(ログ)でしたので、 再度質問させていただきます。 時間が絡むとSQLもプログラムも難しく思います。 参考になりました。ありがとうございます。

その他の回答 (2)

  • calltella
  • ベストアンサー率49% (317/635)
回答No.2

insert into 売上金額 C select 売上単価 A.id, sum( 売上単価 A.money ) * sum( 売上回数 B.money ) from 売上単価 A,売上回数 B where 売上単価 A.id = 1 and 売上回数 B.id=1 これで動くのかあんまり自信ないですがこんな感じのSQLでいいと思います。

回答No.1

計算方法は? 売上単価の日時以降は、その単価で売上回数の回数と掛け算するのですか? 売上回数の回数列の列名は、money?

php4
質問者

お礼

ご指摘ありがとうございます。 おっしゃる通り、単価で売上回数の回数と掛け算で、 売上回数の回数例はmoneyです。 cntにすればよかったですね。わかりずらくてすみませんです。 ご教授いただいたSQLで試して結果を報告しますね。

関連するQ&A

  • 時間毎に単価が変わるログの集計について

    MySQL5で、下記の売上単価 A と売上記録 B より売上金額 C を算出可能でしょうか? ■売上単価 A (いつでも単価の変更ができる) id|datetime|money 1 |2007/4/1 12:00 |100円 1 |2007/4/1 12:29 |1円 ■売上記録 B (他社から送られてくるファイル) id|datetime 1 |2007/4/1 12:15:00 1 |2007/4/1 12:15:02 1 |2007/4/1 12:30:00 ■売上記録 C (自社で保存する) id|datetime|案1)の場合のみ売上記録時の単価も保存・・ 1 |2007/4/1 12:15:00 1 |2007/4/1 12:15:02 1 |2007/4/1 12:30:00 ■売上集計 D (自社で集計する) id|date|money 1 |2007/4/1|201円 単価は次々と変わり売上記録時の単価(売上記録時以前で、最も新しい売上単価)で 売上金額を決定し、id+日付毎に集計します。 案1)売上単価変更が少ないと過程し、 30分の間で変更のあった単価と単価変更日時を取得し、 プログラム上に時間と単価を保持し、 売上記録Bを読み込んで、プログラム上で日時を比較して単価を算出し 売上記録Cに売上記録時の単価も保存して、売上集計は月末に行う。 案2)売上記録Cは売上記録Bをそのまま保存し、 売上集計時にSQL一発で、ID、日別毎に金額を算出する。 案2のSQLは難しくてわかりませんので、案1で行こうかなと思うのですが、どちらの案が良いと思われるでしょうか? メリット、デメリットありそうですが頭がパンクしております(><)

    • ベストアンサー
    • MySQL
  • ACCESS 選択クエリの集計について

    そもそもテーブルの作り方が悪かったと言えるのですが、是非お知恵をお借りしたく投稿しました。 売上テーブル  売上ID 日付 得意先 売上A種テーブル 売上A種ID 売上IDNo 品目 数量 単価 合計  売上B種テーブル 売上B種ID 売上IDNo 品目 数量 単価 合計  売上C種テーブル 売上C種ID 売上IDNo 品目 数量 単価 合計  売上テーブルにメインの情報を入力し、売上A種テーブル、売上B種テーブル、売上C種テーブルに詳細情報を入力できるように売上IDと売上IDNoでリレーションシップを作成しました。 選択クエリでその日の各種の売上を集計したいのですが、必ずその日の得意先の売上の中に売上A種、売上B種、売上C種が含まれているわけではないので、選択クエリで 売上ID-グループ化 日付-グループ化 得意先-グループ化 売上A種合計-合計 売上B種合計-合計 売上C種合計-合計 とした場合、A種、B種、C種すべてに入力がなければ拾ってくれません。 入力の無いもの(売上IDNoのないもの)は0で、あるものはその合計を集計させるにはどのようにしたらよいでしょうか? 何卒、よろしくお願い申し上げます。

  • エクセル関数教えてください。商品契約単価の最高額

    支店ごとに、各商品の売上単価金額が入力されています。埼玉支店 A商品 38,000円 B商品 32,000円 A商品 40,000円 C商品 28,000円 B商品 39,000円 B商品 45,000円 東京支店 A商品 42,000円 A商品 42,500円 A商品 41,000円 B商品 36,000円のように、各支店の売り上げ成績が、表示されます。(支店によって、売り上げた商品も金額も違います。)金額横の列(セル)に、各支店の各商品ごとに、一番単価が高かった単価金額に、○(丸)を表示。そうでない金額には、一律”-”マイナス表示するには、関数をどうすれば良いですか?教えていただけますと助かります。

  • アクセス クエリ・集計・計算方法について

    アクセスの集計機能を使用して、品名毎の数量の合計と金額の合計を算出しようとしていますが、 思うようにできません。どなたか教えてください。 クエリのフィールドを左から・・・ (1)年月: Format([日付],"yyyy/mm")(集計:グループ化) (2)品名(集計:グループ化) (3)品名のカウント(集計機能:カウント) (4)単価(集計:グループ化) (5)金額: [単価]*[品名のカウント](集計:グループ化) このような形でクエリを実行していますが、すべての注文が1つだけなら問題ないのですが、実際には品名には数量が掛けられている場合もあり、現在設定しているクエリ設定では正しい数量の合計と金額の合計を出すことができません。どうか集計方法をご教授いただけないでしょうか。よろしくお願いします。 ■現在のテーブルの設計とリレーションを明記します。 【A】顧客テーブル (1)顧客ID (2)発注コード (3)氏名 【B】商品テーブル (1)商品ID (2)品名 (3)単価 【C】注文テーブル (1)注文ID (2)日付 (3)顧客ID 【D】注文明細テーブル (1)注文明細ID (2)注文ID (3)商品ID (4)数量 リレーション 【A】(1)-【C】(3) 【B】(1)-【D】(3) 【C】(1)-【D】(2)

  • 2つのテーブルでの集計

    こんにちは。 1日悩んでまだ解決出来ないのでちょっと質問に参りました。 以下のような感じのテーブルがあるとして ● T1 名前|A_id|B_id| AAAA|1111|----| BBBB|----|2222| CCCC|3333|4444| ● T2 A_id|金額 1111|2000 3333|1000 1111|4000 ● T3 B_id|金額 2222|2000 4444|4000 ● 抽出結果でやりたいこと →SUM(A_idの金額)とSUM(B_idの金額)を足した金額が5000以上のみ抽出 名前|A_id|B_id|A金額|B金額|横の合計| AAAA|1111|----|6000 |-----|6000 CCCC|3333|4444|1000 |4000 |5000 テーブル同士はLEFT JOINで繋がっており A_id B_idの合計はそれぞれ SUM()を使って、とりあえず出ている状態です あとはA_id と B_idの合計を出して、5000以上のみ抽出で終わりですが 1.SUM(A_id) とSUM(B_id)の合計方法 2.5000以上の判別方法 をどうするか で試行錯誤しているところです。 PHPで無理矢理 判別させれば表は出せると思うのですが、SQL文(というのでしょうか)の中でどうにかしたいと思っています。 SUMの使い方やHAVING WHERE の使い方・使いどころなどが微妙にわからず うまく応用出来ないので、こういう使い方があるよ・出来るよ といった 参考例があれば教えて頂けますでしょうか。ヨロシクお願いします。 MySQL クライアントのバージョン: 5.0.45

    • ベストアンサー
    • MySQL
  • 合計金額に合うように単価の算出方法を教えて下さい。

    見積もりの内訳を先方に提出しなければなりません。 合計金額は先に決まっていて、今は単価が合計に合うように計算する必要があります。 しかし合計に合う単価を求める計算方法が分かりません。ご教示願います。 以下の通りです。 合計金額:560,000円 商品A:333,000個 商品B:45,000個 合計が560,000円になるように商品AとBの単価を出したいのですが… なるべく、商品AとBの単価は同じくらいの金額にしたいです。 最悪、同じ商品の中でも、~個は~円、残りの~個は~円と単価を二つ算出しても構いません。 上記の合計金額は税抜き価格です。消費税は計算に含まなくて結構です。

  • アクセス2003 集計『最後』

    いつもお世話になっています。 <仕入記録テーブル>で商品Aを下記のように複数回入力してあります。(数字がズレてたらすいません。) | 仕入ID | 仕入年月日 | 商品名 | 数量 | 単価 |    76    2006/4/26       A      5     108    78    2006/4/28       A      5     108   253    2006/7/20       A     10     108   815    2006/11/10       A     10     120   843    2007/1/11       A      5     108   852    2007/1/12       A      2     120  1001    2007/2/19       A     10     120 クエリで<仕入記録テーブル>から各商品の最も最近の仕入単価を取り出したいと思い、デザインビューで<仕入記録テーブル>から<単価フィールド>を選択し集計方法を『最後』に設定しました。 すると表示された金額がなぜか108円になってしまいました。 やり方がおかしいのかと思いDLast関数というのも試してみたのですが、構文がイマイチ理解できずうまくいきませんでした。 仕入記録から仕入年月日の最も新しい仕入単価を出すにはどうしたらよいのでしょうか? よろしくお願いします。 

  • PL/SQLでの、集計→結合→集計の仕方

    いつもお世話になってます。 以前こちらで質問をさせていただいたのですが、 http://soudan1.biglobe.ne.jp/qa5076670.html さらに分からないことが出てきたので、また質問させていただきます 【テーブル1】 (年月日) (班) (回数) (秒) (種類) 20090401|aaa| 10| 100 A 20090401|aaa| 20| 200 A 20090501|bbb| 10| 150 B 20090501|bbb| 20| 100 B 20090401|ccc| 10| 100 C 20090401|ccc| 30| 250 C 20090401|ddd| 15| 200 A : : : まずこれを集計し、件数を追加して (班) (回数) (秒) (件) (種類) aaa| 30| 300| 2 A bbb| 30| 250| 2 B ccc| 40| 350| 2 C ddd| 15| 200| 1 A : : : : というようにまとめ、 【テーブル2】 (年月) (班) (円) 200904| aaa| 1000 200905| bbb| 1500 200904| ccc| 2000 200904| ddd| 1200 : : : というテーブルと結合して (年月) (班) (回数) (秒) (円×件) (種類) 200904| aaa| 30| 300| 2000 A 200905| bbb| 30| 250| 3000 B 200904| ccc| 40| 350| 4000 C 200904| ddd| 15| 200| 1200 A : : : : : とするのが前回までで ここから更に種類で集計をして (年月) (回数) (秒) (円×件) (種類) 200904 | 45| 500| 3200| A 200905 | 30| 250| 3000| B 200904 | 40| 350| 4000| C としたいのですが、 SELECT テーブル2.年月, テーブル1集計.種類, sum(テーブル1集計.回数), sum(テーブル1集計.秒数), sum(テーブル1集計.件数 * テーブル2.円) FROM (SELECT 年月日, 班, 種類, sum(回数) 回数, sum(秒数) 秒数, count(*) 件数 FROM テーブル1 GROUP BY 班,種類,年月日) テーブル1集計,テーブル2 WHERE テーブル1集計.班=テーブル2.班 GROUP BY 種類,テーブル2.年月; としたところ、最終的に出力したいテーブルの集計結果の (回数) (秒) (円×件)が正しいものより多くなってしまいました。 長くなって申し分かりません。 どこが間違っているのか、わかる方いらっしゃいましたら 教えていただけないでしょうか??

  • 関数 「単価×売上数量」

           B     C      D        E      F     G      商品名   単価   売上数量   割引金額  消費税  箱代 5   E列の「割引金額」は、「単価」が200より小さい場合、または「売上数量」が100以上の場合は「単価×売上数量」の10%引きで表示し、それ以外の場合は「単価×売上数量」で表示。   「割引金額」の出し方を教えてください。   よろしくお願いします。

  • 2つのテーブルでの集計2

    昨日解決したかと思ったのですが、また出来ないことが出てきたので 同じようなタイトルで再度質問に参りました。 以下のようなテーブルがあるとして、 ● T1 名前|A_id|B_id| AAAA|1111|----| BBBB|----|2222| CCCC|3333|4444| ● T2 id|A_id|金額 01|1111|2000 02|3333|1000 03|1111|4000 ● T3 id|B_id|金額 01|2222|2000 02|4444|4000 ● 抽出結果でやりたいこと →SUM(A_idの金額)とSUM(B_idの金額)を足した金額が5000以上のみ抽出 かつ、T2とT3のid(通し番号)はグループ化せずに個々で出す 名前|A_id|B_id|A金額|B金額|横の合計| AAAA|1111|----|6000 |-----|6000 idはT2:01/03 CCCC|3333|4444|1000 |4000 |5000 idはT2:02/T3:02 表の作成はOKなのですが、個々のデータのidがグループ化してしまって どのデータから参照しているのかわからない状態になってしまいます 抽出結果に応じたidのデータに出力された日付を書き込みたいのですが、 今の状態ですと1つ分にしか書き込みされません… 全く同じ条件下でT2、T3個々のデータのidを全件取り出すことは可能でしょうか??アドバイス宜しくお願いします。。。 MySQL クライアントのバージョン: 5.0.45

    • ベストアンサー
    • MySQL