- PR -

MySQLで擬似(仮想?)カレンダーテーブルみたいなものってありますか?

1
投稿者投稿内容
未記λ
会議室デビュー日: 2008/04/23
投稿数: 2
投稿日時: 2008-04-23 11:38
こんにちは、いつも拝見させていただいています。

日毎の集計表を作成したいのですが、結合しなければならないテーブルが複数有り
それぞれが、データエントリーの無い日があります。

たとえばA,B,C,Dというテーブルがあった場合に、それぞれのエントリ日毎のカウントを
とりたいとします。

たとえば以下のような書式で出力したいのです。
コード:

date A B C D
---------- - - - -
2008-04-01 0 0 1 0
2008-04-02 1 0 0 0
2008-04-03 0 0 0 0 <<この行も出力したい
2008-04-04 0 3 0 1



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 ]
よっしー
大ベテラン
会議室デビュー日: 2007/05/17
投稿数: 143
投稿日時: 2008-04-23 12:18
未記λさん、こんにちは。

私はいつも、実テーブルを作っています。
10年分作ってもたかだか3,652件くらいですし。
オリジナルのテーブルなので、祭日や会社の創立記念日などの休日情報も付与できます。
未記λ
会議室デビュー日: 2008/04/23
投稿数: 2
投稿日時: 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

スキルアップ/キャリアアップ(JOB@IT)