mysql - 如何使用 MySQL 在两个日期之间获取该周的周数和日期
问题描述
我正在使用 MySQL 并且我有两个日期“从日期”和“到日期”,并且基于这些日期,我想获取“到”和“从”日期之间的那一周的周数和日期。
我尝试了以下 mysql 查询。
SELECT count(*) as count,
CONCAT(DATE_FORMAT(DATE_ADD(FROM_DAYS(TO_DAYS(FROM_UNIXTIME(`webform_submissions`.`submitted`)) -MOD(TO_DAYS(FROM_UNIXTIME(`webform_submissions`.`submitted`)) -1, 7)),INTERVAL -6 DAY),'%M %d'), ' - ' ,DATE_FORMAT(FROM_DAYS(TO_DAYS(FROM_UNIXTIME(`webform_submissions`.`submitted`)) -MOD(TO_DAYS(FROM_UNIXTIME(`webform_submissions`.`submitted`)) -1, 7)),'%M %d')) as date ,
CONCAT(YEAR(FROM_UNIXTIME(`webform_submissions`.`submitted`)), '/', WEEK(FROM_UNIXTIME(`webform_submissions`.`submitted`))) as week
FROM `webform_submissions`
where `webform_submissions`.`nid` = 121
AND DATE_FORMAT(FROM_UNIXTIME(`webform_submissions`.`submitted`), '%Y-%m-%d') between '2019-11-01' and '2019-12-03'
GROUP BY week
ORDER BY `webform_submissions`.`submitted` ASC
根据上述查询显示以下结果。
但它似乎给出了错误的结果,因为第 43 周位于 10 月 21 日至 27 日之间,我想在 '2019-11-01' 和 '2019-12-03' 之间得到结果。
预期的输出应该像屏幕截图一样。因为从日期“2019-11-01”开始位于 10 月 28 日至 11 月 3 日(第 44 周)之间。所以记录应该从 44 周数开始。
任何想法如何获得正确的周数和日期?
解决方案
这是您的查询的一个更易于阅读的版本(使用嵌套子查询,因为 MySQL 5.6 不支持 CTE)并使用DATE_FORMAT
格式%x/%v
生成week
匹配您的预期结果(10 月 28 日是第 44 周的开始)。注意我已经MIN
在生成中添加了一个,date
以便查询在 MySQL 5.7 中仍然可以使用 SQL 模式 ONLY_FULL_GROUP_BY。
SELECT COUNT(*) AS count,
CONCAT(DATE_FORMAT(MIN(startofweek), '%M %d'),
' - ',
DATE_FORMAT(MIN(startofweek) + INTERVAL 6 DAY, '%M %d')) AS date,
week
FROM (SELECT submitted - INTERVAL (dayofweek + 6) % 7 DAY AS startofweek,
week
FROM (SELECT nid,
DATE(FROM_UNIXTIME(submitted)) AS submitted,
DATE_FORMAT(FROM_UNIXTIME(submitted), '%w') AS dayofweek,
DATE_FORMAT(FROM_UNIXTIME(submitted), '%x/%v') AS week
FROM webform_submissions
WHERE nid = 121
AND DATE(FROM_UNIXTIME(submitted)) BETWEEN '2019-11-01' AND '2019-12-03'
) AS dates
) AS ws
GROUP BY week
输出(对于我的样本数据)
count date week
3 October 28 - November 03 2019/44
4 November 04 - November 10 2019/45
推荐阅读
- r - 在R中运行java脚本
- java - 计算非质数
- c - 如何为 ac 库 (string.h) 编译和转储程序集?
- javascript - 将 React 组件数组传递给 useState 返回空数组
- python - JSON get请求的疑难解答格式
- javascript - onClick 触发声音
- c# - 无法从根提供程序解析“ServiceBusConsumer”,因为它需要范围服务 DbContext
- javascript - 删除父级而不删除香草javascript中的子级
- typescript - 在 TypeScript 中使用字符串文字基于对象属性的动态返回类型
- sql - 子查询中带有 MAX 函数的 Oracle SQL 子查询