php - SQL WeekOfYear() 在年底停止。备择方案?

标签 php mysql sql date group-by

我有一个根据用户选择的日期范围执行的查询。例如:2019年12月12日至2020年1月13日。

// Retrieve count of attendance, no shows and cancellations per user selected category and sort by week number
   $q = "SELECT YEARWEEK(`start_time`, 0) AS weekno,
    SUM(`is_no_show` = 0 AND `is_cancelled` = 0) as attended,
    SUM(`is_no_show` = 1) AS no_shows,
    SUM(`is_cancelled` = 1)AS cancelled
  FROM `myTable`
  WHERE (`start_time` > :start_date  AND `start_time` < :end_date)
  AND category LIKE :cohort_type
  GROUP BY weekno";

我的问题是此查询在 2019 年 12 月 23 日之后停止提取数据。它似乎停在一年的最后一周,而不是进入 2020 年的第一周。我该如何解释这一点?非常感谢任何建议或提示!

谢谢。

一般数据库结构:

+------------+-----------+-----------+
| start_time |  no_shows | cancelled | 
+------------+-----------+-----------+
| 2019-12-20 |     1     |     0     |   
| 2019-12-21 |     0     |     0     |  
| 2019-12-22 |     0     |     1     | 

目标:我想每周对数据进行求和

编辑:YEARWEEK() 跳过 2020 年的第一周,直接进入第 2 周。

最佳答案

您的查询缺少关于年份的 GROUP BY 条件;截至目前,它将混合属于不同年份的几周,我认为这不是您想要的。我建议使用 YEARWEEK(),它会考虑年份。

此外,您对日期的过滤似乎很尴尬,因为它混合了参数和字符串连接;您可以使用半开间隔(以及适当的参数绑定(bind))。

考虑:

SELECT 
    YEARWEEK(`start_time`) AS weekno,
    SUM(`is_no_show` = 0 AND `is_cancelled` = 0) attended,
    SUM(`is_no_show` = 1) no_shows,
    SUM(`is_cancelled` = 1) cancelled
FROM `attendee_categories_appts_joined`
WHERE 
    `start_time` > :start_date 
    AND `start_time` < :end_date
    AND category LIKE :cohort_type 
GROUP BY weekno

关于php - SQL WeekOfYear() 在年底停止。备择方案?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59861824/

相关文章:

php - 在每 6 秒加载一个页面的同一个 div 中使用 jQuery/Ajax 加载页面?

c# - 使用 ASP.NET 选择所有图像

sql - Hive 查询记录处理计数

php - mysql 和 PHP 中的结果冲突

php - PostgreSQL PDO 插入数组类型

java - 使用 Hibernate 在 MySQL 中存储字节数组

php - MySQL MAX 子查询

Mysql Append表添加列

java - 基于 DSL 的数据过滤

php - 我应该将变量放在类还是构造函数中? PHP