【问题标题】:how to select all week monday to sunday in mysql?如何在mysql中选择所有星期一到星期日?
【发布时间】:2018-11-13 07:42:59
【问题描述】:

我尝试为我的查询选择日期,但我也想在我的 sql 日期获得例如周日甚至没有周日。星期天为零。

这里是mysql

SELECT
    DATE(log_date) DATE,
    COUNT(users) active_users,
    DATE_FORMAT(log_date,'%a') DAYNAME
FROM tbl_accounts
WHERE
    DATE(log_date) BETWEEN DATE(:now) - INTERVAL 1 WEEK AND DATE(:now)
GROUP BY DATE(log_date);

我会发生什么是选择周一到周日即使没有周日我仍然想选择周一,如果为空它会显示零值?有可能吗?

样本输出:

我希望这个输出变成周一到周日,如果没有周日,周日将显示为零。

【问题讨论】:

  • 我认为样本数据和期望的结果会很有帮助。
  • 这里的一个选项是将日历表左连接到您当前的查询。这将包括出现在日历表中的任何日期。
  • 所以我应该有日历表?
  • 所以这很简单,您需要为一周中的每一天进行选择并将它们插入到临时表中,然后查询临时表。
  • 提供的示例输出

标签: php sql mysqli pdo


【解决方案1】:

你是这个意思吗?

SELECT  t.DATE, IFNULL(t.active_users, 0) AS active_users, week.d 
FROM (
SELECT DATE(log_date) DATE,
    COUNT(users) active_users,
    DATE_FORMAT(log_date,'%a') DAYNAME
FROM tbl_accounts
WHERE DATE(log_date) BETWEEN DATE(NOW()) - INTERVAL 1 WEEK AND DATE(NOW())
GROUP BY DATE(log_date)) AS t
RIGHT OUTER JOIN (
    SELECT 'Sun' AS d
    UNION SELECT 'Mon' AS d
    UNION SELECT 'Tue' AS d
    UNION SELECT 'Wed' AS d
    UNION SELECT 'Thu' AS d
    UNION SELECT 'Fri' AS d
    UNION SELECT 'Sat' AS d
) AS week ON week.d = t.DAYNAME

MySQL 中的示例结果如下图所示:

【讨论】:

    【解决方案2】:
    SELECT
        DATE(log_date) DATE,
        COUNT(users) active_users,
        DATE_FORMAT(log_date,'%a') DAYNAME
    FROM tbl_accounts
    WHERE
        DATE(log_date) BETWEEN DATE(:now) - INTERVAL 1 WEEK AND DATE(:now)and
    DATENAME(dw , @date) <> 'Monday'
    GROUP BY DATE(log_date);
    

    只需将其添加到 where clouse 即可将其排除。 DATENAME(dw , @date) &lt;&gt; 'Monday' 这是内置函数 MSSQL。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-05
      • 2020-02-22
      • 2017-05-02
      相关资源
      最近更新 更多