mysql - 列出某些时期内的所有日期
问题描述
我有下面的项目表及其活动期间(期间用 FROM 和 TO 日期定义):
ID | ProjID | ActiveFrom | ActiveTo
===+========+============+============
1 | 20 | 2018-01-01 | 2018-01-04
2 | 20 | 2018-02-05 | 2018-02-07
3 | 20 | 2018-02-20 | 2018-02-22
4 | 30 | 2018-01-15 | 2018-02-15
一个项目有任意数量的活动期。
我需要一个查询,它将返回给定项目的所有活动日期。例如对于 ProjID=20,结果应该是:
2018-01-01
2018-01-02
2018-01-03
2018-01-04
2018-02-05
2018-02-06
2018-02-07
2018-02-20
2018-02-21
2018-02-22
解决方案
你的意思是这样的:
SET @row_number = 0;
SELECT DATE_ADD(DATE_ADD(ActiveFrom, INTERVAL -1 DAY), INTERVAL x.D DAY) AS ActivityPeriods
FROM test
LEFT JOIN(SELECT *, (@row_number:=@row_number + 1) AS D FROM information_schema.COLUMNS) AS x ON x.D <= DATEDIFF(ActiveTo,ActiveFrom) +1
WHERE
ProjID = 20
ORDER BY ActivityPeriods
这会给你:
| ActivityPeriods |
| --------------- |
| 2018-01-01 |
| 2018-01-02 |
| 2018-01-03 |
| 2018-01-04 |
| 2018-02-05 |
| 2018-02-06 |
| 2018-02-07 |
| 2018-02-20 |
| 2018-02-21 |
| 2018-02-22 |
推荐阅读
- css - PWA 迁移到 Ionic 4:iOS 滚动不起作用
- javascript - 材质ui表,编辑单元格选择组合框
- c++ - 在关闭应用程序期间正确关闭可能运行很长时间的线程
- python-3.x - 将读取从ina219传递到文件
- node.js - 是否可以使用 nodemailer 在不同的邮件服务器之间自动切换以发送邮件?
- google-cloud-firestore - 如何在 Firestore 上正确设置规则以获取在 Ionic 4 上发送电子邮件的信息?
- bash - 如何将带有变量的文件移动到带有变量名的文件夹中?
- docker - apt-transport-https 失败
- c++ - c ++中常量指针的目的是什么?
- android - 如何取消发布提供订阅的应用程序?