トップ «前の日記(2008-05-26 (月)) 最新 次の日記(2008-05-30 (金))» 編集
capsctrldays

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)
| | | | | | Permalink
本日のツッコミ(全3件) [ツッコミを入れる]
1 たけかわ (2008-05-29 (木) 13:27)

月末は翌月一日の前日ってところから求めてはどうでしょうか?

2 kdmsnr (2008-05-29 (木) 16:04)

(Date.new 2008, 5, -1).day ですかね。パッと出てこなかったのでTODOにしてました。

3 たけかわ (2008-05-30 (金) 00:06)

そんな簡単に書けるのですか。もっと不便なこと考えてました。反省。

[]

トップ «前の日記(2008-05-26 (月)) 最新 次の日記(2008-05-30 (金))» 編集