繁体   English   中英

每天计算MySQL条目(包括天数在内),不包含任何条目(日期范围)

[英]Count MySQL-Entries per day, inclusive days without any entries (Date Range)

我有一个MySQL表

id     mydate         content
----------------------------------
1      2015-06-20     some content
2      2015-06-20     some content
3      2015-06-22     some content

现在,我要计算每天的条目:

SELECT DATE(mydate) Date, COUNT(DISTINCT id) dayCount FROM mytable
GROUP BY DATE(mydate) HAVING dayCount > -1 ORDER BY DATE(mydate) DESC

这对我有用,结果:

2015-06-20 = 2
2015-06-22 = 1

我如何获取没有任何输入的日子? 在我的示例中,结果应为:

2015-06-19 = 0
2015-06-20 = 2
2015-06-21 = 0
2015-06-22 = 1
2015-06-23 = 0

基于此:

<?php
$today = date("Y-m-d");
$mystartdate = date_create($today);
date_sub($mystartdate, date_interval_create_from_date_string('14 days'));
$mystartdate = date_format($mystartdate, 'Y-m-d');
?>

最后,我想输出最近14天的计数,也要输出“ 0天”。 希望你理解我的问题。

为此,您可以创建一个包含增量数字的新表,但这不是一个好主意。 但是,如果采用这种方式,请使用此表通过DATE_ADD构造日期列表。

根据时间部分将其左联接到数据表上,以获取日期列表

有关更多信息,请通过链接

MySQL如何填充范围内的缺失日期?

尝试以下-

SELECT a.date_field, COUNT(DISTINCT b.id) dayCount FROM 
(SELECT date_field FROM
(
    SELECT
        MAKEDATE(YEAR(NOW()),1) +
        INTERVAL (MONTH(NOW())-1) MONTH +
        INTERVAL daynum DAY date_field
    FROM
    (
        SELECT t*10+u daynum
        FROM
            (SELECT 0 t UNION SELECT 1 UNION SELECT 2 UNION SELECT 3) A,
            (SELECT 0 u 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) B
        ORDER BY daynum
    ) AA
) AAA
WHERE MONTH(date_field) = MONTH(NOW()) ) a 
LEFT JOIN mytable b ON a.date_field=DATE(b.mydate) 
GROUP BY a.date_field HAVING dayCount > -1 ORDER BY a.date_field DESC;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM