Get all Date of month along with data from table

后端 未结 3 1013
终归单人心
终归单人心 2020-12-22 00:43

I have two tables user_profile and tracked_search. The user_profile table has user details and tracked_search tracks sear

3条回答
  •  余生分开走
    2020-12-22 01:03

    By the way, you don't need the join on user_profile.

    If you have a dates table with the relevant dates, this is pretty easy:

    SELECT dates.day AS `Date`, COUNT(DISTINCT ts.user_id) AS user_count
    FROM dates
    LEFT OUTER JOIN tracked_search AS ts
        ON ts.created = dates.day
    GROUP BY dates.day;
    

    Since you probably don't have a dates table and might not want to create and maintain one, you could use one of the solutions for generating the list of dates on the fly. e.g. Get a list of dates between two dates or How to get list of dates between two dates in mysql select query

    SELECT dates.day AS `Date`, COUNT(DISTINCT ts.user_id) AS user_count
    FROM (
        SELECT ADDDATE('1970-01-01', t4.i * 10000 + t3.i * 1000 + t2.i * 100 + t1.i * 10 + t0.i) AS day
        FROM (SELECT 0 AS i UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) AS t0,
             (SELECT 0 AS i UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) AS t1,
             (SELECT 0 AS i UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) AS t2,
             (SELECT 0 AS i UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) AS t3,
             (SELECT 0 AS i UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) AS t4
    ) AS dates
    LEFT OUTER JOIN tracked_search AS ts
        ON ts.created = dates.day
    WHERE dates.day >= '2017-10-01'
    AND dates.day < '2017-11-01'
    GROUP BY dates.day;
    

提交回复
热议问题