最近30天的Mysql日期
Posted
技术标签:
【中文标题】最近30天的Mysql日期【英文标题】:Mysql dates of the last 30 days 【发布时间】:2021-06-08 18:03:21 【问题描述】:我需要一些关于 mysql 日期的帮助
我有这个查询,它给我带来了过去 30 天内每条消息的相应日期的消息计数。
SELECT DATE_FORMAT(time, '%m/%d/%Y') AS Dates, count(*) as count
FROM ma_messages
WHERE time BETWEEN NOW() - INTERVAL 30 DAY AND NOW()
AND usersid_send = 110
Group by Dates
ORDER BY Dates ASC
query image
但我还需要将过去 30 天的其他日期带入计数为 0 的值,例如,在查询中还带入 05/26/2021 日期和 05/25/ 之前的日期2021 年及 2021 年 5 月 28 日之后。
我不知道这是否可能,但我会感谢任何帮助。
谢谢。
【问题讨论】:
生成日期列表(日历)并将您的数据左连接到它。 您好,我有一张带日期的表格,但我是新来的,我不知道该怎么做 leftjoin 但还是谢谢您 我有一张带日期的表格 它包括所有日期?包括数据表中没有的日期? 是的,是一个包含一年中所有日期的表格 这能回答你的问题吗? MySQL how to fill missing dates in range? 【参考方案1】:试试这个
SELECT
DATE_FORMAT(time, '%m/%d/%Y') AS Dates,
count(if(usersid_send='110',true,null)) as count
FROM ma_messages
WHERE time BETWEEN NOW() - INTERVAL 30 DAY AND NOW()
Group by Dates
ORDER BY Dates ASC
【讨论】:
好的,它给我带来了就像我说的 05/26/2021 日期和 06/07/2021 日期,但过去 30 天的其余日子没有带来,谢谢无论如何,也许我可以用这个做点什么【参考方案2】:我有一张带日期的表格……一年中的所有日期——Alexis Murillo
SELECT d.`date`, COUNT(m.`time`) AS `count`
FROM dates_table d
LEFT JOIN ma_messages m ON d.`date` = DATE(m.`time`)
WHERE d.`date` BETWEEN NOW() - INTERVAL 30 DAY AND NOW()
AND m.usersid_send = 110
GROUP BY d.`date`
ORDER BY d.`date` ASC
【讨论】:
它不会给我带来过去 30 天的其他日期,计数为 0,但至少它与日期表有左连接,无论如何我都很感激【参考方案3】:使用您的表格“包含一年中的所有日期”:
WITH
message_counts AS ( SELECT DATE_FORMAT("time", '%m/%d/%Y') AS "day",
COUNT(*) AS "count"
FROM ma_messages
WHERE "time" BETWEEN NOW() - INTERVAL 30 DAY AND NOW()
AND
usersid_send = 110
GROUP BY Dates)
SELECT all_dates."day", COALESCE(message_counts."count", 0)
FROM all_dates
LEFT JOIN message_counts
ON all_dates."day" = message_counts."day"
WHERE all_dates."day" BETWEEN BETWEEN NOW() - INTERVAL 30 DAY AND NOW()
ORDER BY all_dates."day" ASC
【讨论】:
以上是关于最近30天的Mysql日期的主要内容,如果未能解决你的问题,请参考以下文章