2008-05-28 (水) [長年日記]
1 日付順にデータを表示したい(けどデータがない日付がある)ときのSQL
どうかなあ。これならビューであれこれしなくて済みそう。
#サンプルコードが動くかどうか不明。こういう感じでやってくれってことで。
カレンダー用の日付テーブルにデータを入れる
CREATE TABLE cal(num VARCHAR(2) NOT NULL);
INSERT INTO cal VALUES('01');
INSERT INTO cal VALUES('02');
:
INSERT INTO cal VALUES('31');
SQLを動的に作る
def cal_sql(y, m)
ym = "'%04d-%02d-'" % [y, m]
lastdate = 31 # TODO
sql =<<-SQL
SELECT * FROM
(SELECT #{ym}||num AS date FROM cal WHERE num <= #{lastdate}) AS a_tbl
LEFT OUTER JOIN
(SELECT date FROM hogehoge GROUP BY date) AS b_tbl
ON a_tbl.date = b_tbl.date
ORDER BY a_tbl.date
SQL
cal = AR.find_by_sql sql
end
cal_sql(2008, 05)
[]
| 
月末は翌月一日の前日ってところから求めてはどうでしょうか?
(Date.new 2008, 5, -1).day ですかね。パッと出てこなかったのでTODOにしてました。
そんな簡単に書けるのですか。もっと不便なこと考えてました。反省。