|注文日|顧客名|日付間隔|
|2013-04-23|はてな(株)|0|
|2013-04-30|はてな(株)|7|
|2013-5-12|はてな(株)|12|
|2013-5-16|はてな(株)|4|
このような感じで、注文と注文の間の日付間隔をSQL一発で算出することは可能なのか教えて頂けないでしょうか?
プログラムで算出すれば簡単なんですが、それを書くのもかったるくなったので・・・
よろしくお願い致します。
過去質問を見ると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 ;
大変参考になりました。ありがとうございました。
2014/02/03 18:30:35