- - PR -
MySQLで擬似(仮想?)カレンダーテーブルみたいなものってありますか?
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2008-04-23 11:38
こんにちは、いつも拝見させていただいています。
日毎の集計表を作成したいのですが、結合しなければならないテーブルが複数有り それぞれが、データエントリーの無い日があります。 たとえばA,B,C,Dというテーブルがあった場合に、それぞれのエントリ日毎のカウントを とりたいとします。 たとえば以下のような書式で出力したいのです。
SELECT CAL.DAY, COUNT(A.*) AS A, COUNT(B.*) AS B, COUNT(C.*) AS C, COUNT(D,*) AS D FROM (CALENDAR_FAKE_TABLE) AS CAL LEFT JOIN A ON CAL.DAY=A.ENTDATE LEFT JOIN B ON CAL.DAY=B.ENTDATE LEFT JOIN C ON CAL.DAY=C.ENTDATE LEFT JOIN D ON CAL.DAY=D.ENTDATE WHERE CAL.DAY BETWEEN 'FROM' AND 'TO' なんてことが出来たらステキだなぁと思うのですが、実テーブルを作るしか ないのでしょうか? こういった擬似(仮想?)テーブルのようなものを実装しているDBMSは存在するのでしょうか? あるといろいろ便利な気がするのですが.... #SQLに誤記があったので修正 [ メッセージ編集済み 編集者: 未記λ 編集日時 2008-04-23 12:35 ] | ||||
|
投稿日時: 2008-04-23 12:18
未記λさん、こんにちは。
私はいつも、実テーブルを作っています。 10年分作ってもたかだか3,652件くらいですし。 オリジナルのテーブルなので、祭日や会社の創立記念日などの休日情報も付与できます。 | ||||
|
投稿日時: 2008-04-23 12:43
返信ありがとうございます。
やはり実テーブルで対応が○ですかね。 今回は日付だけ取れれば、よかったので実テーブルを作成する必要がないな とおもいまして、もしかしたら便利な機能がないかなと探していたわけです。 他にも連番などが作成できたり、したら便利なんですけどね。 SELECT NO FROM (SELECT RANGE(INTEGER, 100, 200, 1)) AS NO とか SELECT `DATE` FROM (SELECT RANGE(DATE, '2008-01-01', '2008-12-31', 1)) AS `DATE` のような感じで... あきらめて、実テーブルで作業をすすめてます(`・ω・´) もしかしたら、みつかるかもしれないので代替できるような形で進めてますが... 多分テーブルを使わない方法があれば、パフォーマンスもいいと思うんですよね。 っていうかこのSQLが思いっきり間違えてますねorz SELECT CAL.DAY, (SELECT COUNT(A.*) FROM A WHERE CAL.DAY=A.ENTDATE) AS A, (SELECT COUNT(B.*) FROM B WHERE CAL.DAY=B.ENTDATE) AS B, (SELECT COUNT(C.*) FROM C WHERE CAL.DAY=C.ENTDATE) AS C, (SELECT COUNT(D,*) FROM D WHERE CAL.DAY=D.ENTDATE) AS D FROM (CALENDAR_FAKE_TABLE) AS CAL WHERE CAL.DAY BETWEEN 'FROM' AND 'TO' こうでしたね。 [ メッセージ編集済み 編集者: 未記λ 編集日時 2008-04-23 13:18 ] [ メッセージ編集済み 編集者: 未記λ 編集日時 2008-04-23 13:19 ] [ メッセージ編集済み 編集者: 未記λ 編集日時 2008-04-23 13:30 ] |
1