最速怪談選手権

例えば、
商品コード(PRIMARY),売れた日
というカラムがあるDBのテーブルがあって、
これでどの商品がいつ売れたのかを管理しているとします。

このテーブルから、商品Aが先月何個売れたか、N月に何個売れたか、先週何個売れたか、ここ半年の週別売り上げ個数一覧・・・
のようなデータを取得するプログラムを組もうとしています。

しかし日付の計算の仕方がどうにもわからず困っています。
「今日の日付」という情報から、上記のような情報がSQLで取れるようにするための時間的条件を指定できる日付情報の算出の仕方を教えてください。
お願いいたします。

A 回答 (4件)

MySQL的な先月の選択



SELECT * FROM テーブル
WHERE DATE_FORMAT(CURDATE(),'%Y-%m-01') - INTERVAL 1 MONTH AND DATE_FORMAT(CURDATE(),'%Y-%m-01') - INTERVAL 1 DAY

>過去1年間の月毎の売り上げ
これをやるなら、何年何月という情報をあらかじめフィールドで持っていない
とSQLとしてはきちんとしたチューニングはできません。

とりあえずGROUP BY (DATE_FORMAT(売れた日,'%y%m'))などで集計はできます
(たぶんインデックスがきかないですけど)
    • good
    • 0

再度回答します。



PHPでも日付の計算ができます。
日付関連の計算についてキレイにまとめてある記事を発見しましたので、
参考URLに記載しておきますね。

参考URL:http://www.hoge256.net/2007/08/63.html
    • good
    • 0

PHPで求めたいなら



echo "1日前は" . date("Y/m/d",strtotime("-1 day" ,strtotime("now"))) . "\n";
echo "1ヶ月前は " . date("Y/m/d",strtotime("-1 month" ,strtotime("now"))) . "\n";
echo "1年前は " . date("Y/m/d",strtotime("-1 year",strtotime("now"))) . "\n";
echo "1週間前は " . date("Y/m/d",strtotime("-1 week" ,strtotime("now"))) . "\n";

とかすれば取得できます。

MYSQLで求めたいなら date_addを使えばいいと思います。
http://www9.atwiki.jp/my-sql/pages/99.html


>あと、過去1年間の月毎の売り上げ個数などの場合

上記で日付を求めた後、YYYYMMの部分だけ切り出して、前方一致を条件にすればどうでしょう。
(SQLでは遅くなりそうですが)
    • good
    • 0

言語、データベースの種類はさておき、


簡単な考え方を示します。

例えば『今日の日付』からは『年』『月』『日』『時刻』などが取得できます。
それを元にすれば、先月が何年の何月なのか、といった情報が取れます。

『売れた日』を日付型データで保持していると仮定すると、
本日 [2008/09/14] を基準にして昨日のデータが欲しい場合、

WHERE '2008/09/13 00:00:00' <= 売れた日
AND 売れた日 <= '2008/09/13 23:59:59'

といった感じでWHERE句を指定すれば、日付の範囲が取れますね。
以下のような書き方でも同じ意味になります。

WHERE 売れた日 BETWEEN '2008/09/13 00:00:00' AND '2008/09/13 23:59:59'

日付型データの扱い方についてはSQL関連のウェブサイト等を
参考にしていただくと理解が深まるかと思います。

この回答への補足

ありがとうございます。
PHPとMySQLを使っています。

例えば、今日の日付'2008/09/04'から、先月が何月だったか、などはどうやって取れるものなのでしょうか?
全部自動でできるようにしておきたいのです。

あと、過去1年間の月毎の売り上げ個数などの場合、一ヶ月の日数は一定ではないし、、計算の仕方がわかりません。

補足日時:2008/09/04 19:27
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!