- 締切済み
このような場合の日付計算について
例えば、 商品コード(PRIMARY),売れた日 というカラムがあるDBのテーブルがあって、 これでどの商品がいつ売れたのかを管理しているとします。 このテーブルから、商品Aが先月何個売れたか、N月に何個売れたか、先週何個売れたか、ここ半年の週別売り上げ個数一覧・・・ のようなデータを取得するプログラムを組もうとしています。 しかし日付の計算の仕方がどうにもわからず困っています。 「今日の日付」という情報から、上記のような情報がSQLで取れるようにするための時間的条件を指定できる日付情報の算出の仕方を教えてください。 お願いいたします。
- m2air2m
- お礼率8% (8/98)
- PHP
- 回答数4
- ありがとう数0
- みんなの回答 (4)
- 専門家の回答
みんなの回答
- yambejp
- ベストアンサー率51% (3827/7415)
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'))などで集計はできます (たぶんインデックスがきかないですけど)
- Splatter
- ベストアンサー率41% (181/440)
再度回答します。 PHPでも日付の計算ができます。 日付関連の計算についてキレイにまとめてある記事を発見しましたので、 参考URLに記載しておきますね。
- tsaito
- ベストアンサー率68% (17/25)
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では遅くなりそうですが)
- Splatter
- ベストアンサー率41% (181/440)
言語、データベースの種類はさておき、 簡単な考え方を示します。 例えば『今日の日付』からは『年』『月』『日』『時刻』などが取得できます。 それを元にすれば、先月が何年の何月なのか、といった情報が取れます。 『売れた日』を日付型データで保持していると仮定すると、 本日 [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関連のウェブサイト等を 参考にしていただくと理解が深まるかと思います。
関連するQ&A
- PostgreSQLで日付範囲内の日付を全 て取得する方法
PostgreSQLに、 2003/01/01~2003/05/10などの範囲の日付を 全て取得するSQLはありますでしょうか? 以下のような結果(日付リスト)を取得したいのですが、 DBには、日付カラムは存在しません。 PostgreSQL自体に日付を管理しているテーブルなどがあれば、それにアクセスできれば可能そうなのですが・・・ 2003/01/01 2003/01/02 2003/01/03 ・ ・ ・ 2003/05/10 よろしくお願いします。
- 締切済み
- その他(データベース)
- 効率の良いSQL文の書き方を教えてください
MySQLで開発をしています。 1回のSQLで、下記テーブルの内容を日付・ユーザ番号毎(日付・ユーザ番号が同じ時に同じレコード)に、 型番1個数、 型番2個数、 その他が2か3で型番2・品番1個数、 その他が2か3で型番2・品番1個数、 その他が2か3で型番2・品番1での売上小計、 その他が2か3で型番2・品番2個数での売上小計、 売上合計、 以上の各カラムを持つテーブルに再編して返したいのですが、 効率の良いやり方がわかりません。 どなたかよろしくお願いします。 テーブル ユーザ番号 日付 型番 品番 売上 その他 ----- --- --- --- --- --- 001 3/10 1 2 500 1 001 3/10 2 1 0 1 003 3/11 2 1 100 2 004 3/12 1 1 100 2 005 3/12 2 2 0 2 001 3/13 1 2 500 1 003 3/13 2 1 100 2 003 3/13 2 1 0 3 002 3/14 1 1 100 3 005 3/15 2 2 0 1
- 締切済み
- MySQL
- group byにより集計した結果での名称取得方法
次のようなテーブルがあったとして、一回のSQLで商品名称とその売上件数の一覧を作成することは可能なのでしょうか? 【売上テーブル】 ID 販売日 商品ID 0001 2011/01/01 1 0002 2011/01/01 2 0003 2011/01/03 1 0004 2011/01/10 1 0005 2011/01/12 2 ・・・ 【商品マスタ】 ID 商品名 1 りんご 2 みかん 3 いちご 【最終的に作成したい一覧】 商品名 件数 りんご 3 みかん 2 いちご 0 ※売上テーブルに存在しない商品についても、件数が0件として一覧に出力出来るようにしたいです。 select 商品ID from 売上テーブル group by 商品ID にて商品ID毎の件数を算出し、それとは別に select ID,商品名 from 商品マスタ として、商品IDと名称のリストを取得後、アプリにてこれらの情報を突き合わせれば実現できるのは分かるのですが、これらの処理を一回のSQLにまとめることは可能なのでしょうか? よろしくお願いします。
- ベストアンサー
- SQL Server
- COUNTIFS関数 条件が日付の場合の入力方法
いつも回答ありがとうございます。 別シートに一覧があります。この別シートから個数を算出し、集計用シートに個数を表示させようと思っています。COUNTIFSの記述方法通り【集計用のC4セルに=COUNTIFS(一覧!$D$8:$D$76,C3,一覧!B8:B51,B4)】に入力しましたが、結果がVALUEになります。日付の条件記述方法が間違っていると思われますが、何処が間違っているのか分かりません。御指導の程よろしく願い致します。 一覧 B8:B100 に日付 D8:D100 に商品名 集計用シート B4:B100 に日付が連番で入力されている C3:Q3 に商品名が入力されている 集計用シートのセル番地を使用して条件入力。
- ベストアンサー
- オフィス系ソフト
- Accessへ日付をINSERT
今Access2000のテーブルから文字として受け取ったデータを 同じくAccessの別テーブルの日付型にINSERTしようとしています。 ソフトはVC6.0を使用しています。 受け取るSELECTはうまくできています。 UCHAR sqlstr [ ] ="INSERT INTO テーブル名" "(カラム1、カラム2、カラム3)" "VALUES(?,?,?)"; INSERTはこのようにSQL文を用意しておいてSQLExecuteで SQL文を実行しようとしています。 この場合にカラム1が日付型だとしたら、 「?」のパラメータには文字として渡し、 SQL文のなかで "VALUES(to_date(?,'YYYYMMDD'),?,?)"; とすればうまくいくと思ったのですができません。 いろいろサイトを見るとAccessでは「’」ではなく「#」を使うと 書いてあったので to_date(?,#YYYYMMDD#) とやったのですがエラーになってしまいます。 ちなみにパラメータとして渡す文字列は「20020413」という 8桁の普通の文字です。 どなたか知っている方いませんでしょうか? 他に方法があればそれでも構いません。 どうか教えてください。m(__)m どうしても先へ進めません…。
- 締切済み
- C・C++・C#
- Access2003で日付や時間の平均を計算
テーブルに商品の購入時間を ・日付 = yyyy/mm/dd(型は日付) ・時間 = hh:mm:ss(型は日付) の2つのカラムで持っています。 1年間の商品購入テーブルに対して商品毎の特性をクエリで出そうと思いました。 ・時間の平均(何時に買われやすい商品か) ・日付の平均?(何月・どの季節によく買われている商品か) とりあえず、時間の平均をデザインビューで 「集計=平均」でとってみたところ「0.569493210808057」というような数値がでてきました。 日付型の時間(hh:mm:ss)の平均をとる場合、どのようにクエリを設定すればよいでしょうか? また、どの季節に買われているか、というのはAccessで出せるものなのでしょうか? すみませんが、よろしくお願いします。
- 締切済み
- オフィス系ソフト
- 日付を入力するには?
PHP+SQLサーバ2003でWEB作成をしています。 PHPでPOSTされた年月日をSQLサーバのカラム(smalldate型)に格納したいのですが、入力された通りにはDBに日付が格納されないのです。 例)2007/10/10 → (DB)1905/06/14 ソースはこんな感じです。 //年、月、日と入力された値を"年/月/日" の形にする $day = implode("/",array($_POST["year"],$_POST["month"],$_POST["day"])); //入力された日付をDBに格納する。 $sql = "insert into table_name(date) values($day)"; 根本的に何かが間違っていると思われるのですが、よくわかりません。 どなたかアドバイスお願いします。
- ベストアンサー
- SQL Server
- 【Excel VBA】DBがOracleの場合のSQL文
SQL文で日付で条件をする場合について。 以前、DBがSQLサーバーの場合の指定方法を教えていただきましたが、 Oracleの場合はどうすればよいでしょうか? その時のURL:http://okwave.jp/qa3471834.html (過去の質問から引用) >SQL Server なら >strSql = strSql & " AND 日付 >= '" & dateTarget_s & "'" ※『日付』はテーブルのカラム名で日付型、 『dateTarget_s』も日付型です Oracleの場合は、#を使用でしょうか? (組み合わせ方が解らず) すみませんが、よろしくお願いします。
- ベストアンサー
- オフィス系ソフト
- ファイルメーカーのフィールドの定義について
ファイルメーカーでの開発を行っており以下の疑問が発生しました。 1つのファイルメーカー(1ファイル)で定義できるフィールドは はRDBでいうところのテーブルなのでしょうか? 例えば以下のファイルメーカーは 「商品.fp5」のフィールド「商品番号」「商品名」「仕入れ価格」 「売上.fp5」のフィールド「商品番号」「売上金額」「支払区分」 以下のDBに相当するのでしょうか? DB名:基幹DB テーブル名:商品 / カラム:「商品番号」「商品名」「仕入れ価格」 テーブル名:売上 / カラム 「商品番号」「売上金額」「支払区分」 何でこんなことを質問するかといいますと ファイルメーカーの1ファイルで商品テーブルと売上テーブルの値を定義したいけど 無理そうだと判断したからです。 実際のところはどうなのでしょうか?ご存知の方よろしくお願いいたします。
- ベストアンサー
- その他(データベース)
- access2003初心者です。50商品の在庫管理をしています。
access2003初心者です。50商品の在庫管理をしています。 作成したのは ・商品テーブル(商品コード、商品名) ・受注テーブル(日付、商品コード、個数) です。 受注テーブルには受注があった商品のデータしか入力していません。 しかしレポートでは、すべての商品を並べて 「受注がない商品については、数量を0」 としてレポートを作成したいと考えています。 レポートを作成するには、「元となるテーブルやクエリが必要になってくる」と本に書いてあったのですが、 この元となるクエリを作成することができません。 作成したいクエリは次のとおりです。 日付 商品 個数 2008/04/01 商品01 2 2008/04/01 商品02 0←このデータ(日付、商品、個数)は受注テーブルにはありません。以下同じ。 ・ ・ ・ ・ ・ ・ 2008/04/01 商品50 2 2008/04/02 商品01 1←ここから日付が翌日になります。 2008/04/02 商品02 1 ・ ・ ・ ・ ・ ・ 2008/04/02 商品50 0 2008/04/03 商品01 2←ここから日付が翌々日になります。 2008/04/03 商品02 2 ・ ・ ・ ・ ・ ・ データがないものに対して、 自動で日付を入力したり、個数を0にしたりしたいのですが、 どのような抽出条件またはSQLなどを書いたらいいのかわかりません。 よろしくお願いします。
- ベストアンサー
- オフィス系ソフト
補足
ありがとうございます。 PHPとMySQLを使っています。 例えば、今日の日付'2008/09/04'から、先月が何月だったか、などはどうやって取れるものなのでしょうか? 全部自動でできるようにしておきたいのです。 あと、過去1年間の月毎の売り上げ個数などの場合、一ヶ月の日数は一定ではないし、、計算の仕方がわかりません。