Find missing date and add them into result - MySql

最后都变了- 提交于 2020-01-05 05:36:08

问题


I have a query that looks like this:

  SELECT count(*)
        ,date_format(created, '%d/%m/%y ') as datecreated
    FROM mimesi_indexer.meta_served_clips
GROUP BY DATE(created)
ORDER BY created ASC

The problem is that some dates are missing in the database. I need to have those dates into the results showing the date's count as 0 and the date itself. How can I do it please? Thanks

EDIT:

count(*) is in the left column
created is the right one

a) data:

2610, 11/04/17
1332, 12/04/17
2082, 26/04/17
3584, 27/04/17

b) expected result:

2610   11/04/17 
1332   12/04/17 
0      13/04/17 
0      14/04/17 
0      15/04/17 
0      16/04/17 
0      17/04/17 
0      18/04/17 
0      19/04/17 
0      20/04/17 
0      21/04/17 
0      22/04/17 
0      23/04/17 
0      24/04/17 
0      25/04/17 
2082   26/04/17 
3584   27/04/17 

c) actual result:

2610    11/04/17
1332    12/04/17
2082    26/04/17
3584    27/04/17

回答1:


it might not be a perfect solution, but this might give you the result: the second query after UNION ALL in the inner SELECT should return all dates between the MIN(created) and the MAX(created) of your table with the counter value 0.

    SELECT SUM(a.ctr)
      ,a.datecreated
  FROM 
  (

    SELECT COUNT(*) as ctr, date_format(created, '%d/%m/%y ') as datecreated 
    FROM mimesi_indexer.meta_served_clips
    GROUP BY DATE(created)
UNION ALL 
    select 0 as ctr, date_format(selected_date, '%d/%m/%y ') as datecreated 
       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 (SELECT MIN(created) FROM mimesi_indexer.meta_served_clips)
        and (SELECT MAX(created) FROM mimesi_indexer.meta_served_clips)
   ) a
   group by a.datecreated
   order by month(a.datecreated), date(a.datecreated)


来源:https://stackoverflow.com/questions/45011431/find-missing-date-and-add-them-into-result-mysql

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!