1

I have a query,

select value, updateddate from valid_table where date(updateddate) between '2018-11-01' and '2018-11-07';

value date
40    2018-11-01
50    2018-11-03
70    2018-11-05

But I want to display all dates even if there is no data for particular date like below,

value date
40    2018-11-01
0     2018-11-02
50    2018-11-03
0     2018-11-04
70    2018-11-05
0     2018-11-06
0     2018-11-07

Note : start and end date may come 2018-10-01 and 2018-12-01

How to achieve this?

iminiki
  • 2,549
  • 12
  • 35
  • 45
MMMMS
  • 2,179
  • 9
  • 43
  • 83

2 Answers2

1

You can try below using left join

 select tdate, coalesce(value,0) as value from 
    (select adddate('1970-01-01',t4.i*10000 + t3.i*1000 + t2.i*100 + t1.i*10 + t0.i) tdate from
     (select 0 i union select 1 union select 2 union select 3 union select 4 union select 5 union select 6 union select 7 union select 8 union select 9) t0,
     (select 0 i union select 1 union select 2 union select 3 union select 4 union select 5 union select 6 union select 7 union select 8 union select 9) t1,
     (select 0 i union select 1 union select 2 union select 3 union select 4 union select 5 union select 6 union select 7 union select 8 union select 9) t2,
     (select 0 i union select 1 union select 2 union select 3 union select 4 union select 5 union select 6 union select 7 union select 8 union select 9) t3,
     (select 0 i union select 1 union select 2 union select 3 union select 4 union select 5 union select 6 union select 7 union select 8 union select 9) t4) t1
    left join valid_table on t1.tdate= updateddate 
    where tdate between '2012-02-10' and '2012-02-15'
Fahmi
  • 37,315
  • 5
  • 22
  • 31
0

To get the dates between start and end date you can use below query. Hope this can help you. To get this result from table you can use joins.

select * from 
(select adddate('1970-01-01',t4.i*10000 + t3.i*1000 + t2.i*100 + t1.i*10 + t0.i) selected_date from
 (select 0 i union select 1 union select 2 union select 3 union select 4 union select 5 union select 6 union select 7 union select 8 union select 9) t0,
 (select 0 i union select 1 union select 2 union select 3 union select 4 union select 5 union select 6 union select 7 union select 8 union select 9) t1,
 (select 0 i union select 1 union select 2 union select 3 union select 4 union select 5 union select 6 union select 7 union select 8 union select 9) t2,
 (select 0 i union select 1 union select 2 union select 3 union select 4 union select 5 union select 6 union select 7 union select 8 union select 9) t3,
 (select 0 i union select 1 union select 2 union select 3 union select 4 union select 5 union select 6 union select 7 union select 8 union select 9) t4) v
where selected_date between '2012-02-10' and '2012-02-15'
Pragna
  • 470
  • 1
  • 3
  • 18