人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

ある日付の間隔を再帰的にSQLで算出したいと考えています。

|注文日|顧客名|日付間隔|
|2013-04-23|はてな(株)|0|
|2013-04-30|はてな(株)|7|
|2013-5-12|はてな(株)|12|
|2013-5-16|はてな(株)|4|

このような感じで、注文と注文の間の日付間隔をSQL一発で算出することは可能なのか教えて頂けないでしょうか?

プログラムで算出すれば簡単なんですが、それを書くのもかったるくなったので・・・

よろしくお願い致します。

●質問者: ござ先輩
●カテゴリ:コンピュータ ウェブ制作
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● うぃんど
●100ポイント ベストアンサー

過去質問を見るとphpやwordpressなどを使ってたみたいだから、
MySQLで例を作ってみた。

CREATE TABLE `注文`(`注文日` date,`顧客名` text)
;

INSERT INTO `注文`
VALUES ('2013-04-23','はてな(株)')
 , ('2013-04-30','はてな(株)')
 , ('2013-5-12','はてな(株)')
 , ('2013-5-16','はてな(株)')
;

SELECT a.*
 , COALESCE (
 (
 SELECT DATEDIFF( a.`注文日`, b.`注文日` )
 FROM `注文` b
 WHERE b.`顧客名` = a.`顧客名` AND b.`注文日` < a.`注文日`
 ORDER BY b.`注文日` DESC
 LIMIT 1
 ), 0
 ) `日付間隔`
FROM `注文` a
;

おまけでwindows関数を持っているRDBMS向け

CREATE TEMPORARY TABLE "注文"("注文日" date,"顧客名" text)
;

INSERT INTO "注文"
VALUES ('2013-04-23','はてな(株)')
 , ('2013-04-30','はてな(株)')
 , ('2013-5-12','はてな(株)')
 , ('2013-5-16','はてな(株)')
;

SELECT a.*
 , COALESCE (
 "注文日" - lag( "注文日" ) OVER ( PARTITION BY "顧客名" ORDER BY "注文日" )
 , 0
 ) "`日付間隔"
FROM "注文" a
;

ござ先輩さんのコメント
大変参考になりました。ありがとうございました。
関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ