1

指定された日付間のすべてのデータを表示したい。データが見つからない日付 すべての列に null を表示したい

テーブル スキーマ

TimeEntry(id: integer, project_id: integer, user_id: integer, hours: float, comments: string, spent_on: date)

今まで試したこと、

set @num = -1;
SELECT DATE_ADD(  '2009-01-01', INTERVAL @num := @num +1
DAY ) AS date_sequence, time_entries.id
FROM time_entries
WHERE user_id =55
HAVING DATE_ADD(  '2009-01-01', INTERVAL @num DAY ) <=  '2012-01-01'

次の出力が得られます

date_sequence id
2009-01-01  46
2009-01-02  50
2009-01-03  55
2009-01-04  01
2009-01-05  02
2009-01-06  24
2009-01-07  57
2009-01-08  59
2009-01-09  74
2009-01-10  78

期待される出力は

date_sequence id
2009-01-01  NULL
2009-01-02  NULL
2009-01-03  NULL
2009-01-04  NULL
2009-01-05  NULL
2009-01-06  NULL
2009-01-07  NULL
2009-01-08  NULL
2009-01-09  74
2009-01-10  78

id は 09 と 10 のみ存在するため

日付を他のフィールドと一致させる方法は?

ヒント/コメント?

Rails ベースのソリューションも役立ちます。

編集:

これまでレールで試したこと

def create_dates(from_time,till_time)
  dates = []
  date_from = from_time.to_time
  while date_from <= till_time.to_time && periods.length <= 100          
      dates << "#{date_from.to_date}"
      date_from = date_from + 1.day
  end
dates

終わり

指定された期間の間の日付を返します。しかし、私は自分のデータをこれらの日付と一致させることができません

4

1 に答える 1

1

これを試して:

set @num = -1;
select t1.date_sequence, count(t2.id) from
 (SELECT DATE_ADD(  '2009-01-01', INTERVAL @num := @num +1 DAY ) AS date_sequence
  FROM time_entries HAVING DATE_ADD(  '2009-01-01', INTERVAL @num + 1 DAY ) <=  '2012-01-01') as t1
left outer join time_entries as t2 on t1.date_sequence = t2.spent_on
group by t1.date_sequence
order by t1.date_sequence;
于 2012-06-01T18:39:11.373 に答える