How to generate data in MySQL?

后端 未结 4 1664

Here is my SQL:

SELECT 
  COUNT(id),
  CONCAT(YEAR(created_at), \'-\', MONTH(created_at), \'-\', DAY(created_at))
FROM my_table
GROUP BY YEAR(created_at), MO         


        
4条回答
  •  佛祖请我去吃肉
    2020-11-27 08:38

    Testbed:

    create table testbed (id integer, created_at date);
    insert into testbed values
           (1, '2012-04-01'),
           (1, '2012-04-30'),
           (2, '2012-04-02'),
           (3, '2012-04-03'),
           (3, '2012-04-04'),
           (4, '2012-04-04');
    

    I also use any_table, which I created artificially like this:

    create table any_table (id integer);
    insert into any_table values (1), (2), (3), (4), (5), (6), (7), (8), (9), (10);
    insert into any_table select * from any_table; -- repeat this insert 7-8 times
    

    You can use any table in your database that is expected to have more rows then max(created_dt) - min(created_dt) range, at least 365 to cover a year.

    Query:

    SELECT concat(year(dr._date),'-',month(dr._date),'-',day(dr._date)),
           -- or, instead of concat(), simply: dr._date
           count(id)
      FROM (
            SELECT date_add(r.mindt, INTERVAL @dist day) _date,
                   @dist := @dist + 1 AS days_away
              FROM any_table t
              JOIN (SELECT min(created_at) mindt,
                           max(created_at) maxdt,
                           @dist := 0
                      FROM testbed) r
             WHERE date_add(r.mindt, INTERVAL @dist day) <= r.maxdt) dr
      LEFT JOIN testbed tb ON dr._date = tb.created_at
     GROUP BY dr._date;
    

提交回复
热议问题