sql - 如何提取范围内的日期?
问题描述
我有一个包含日期范围内数据的表(SQL Server 2017)。
+---------+----------+------------+---------------+-------------+
| good_id | store_id | promo_name | date_id_begin | date_id_end |
+---------+----------+------------+---------------+-------------+
| 1122 | 42 | promo_1 | 2020-02-01 | 2020-02-05 |
+---------+----------+------------+---------------+-------------+
| 2244 | 41 | promo_2 | 2020-03-01 | 2020-03-03 |
+---------+----------+------------+---------------+-------------+
我需要在此期间按天获取这些数据。
+---------+----------+------------+---------------+
| good_id | store_id | promo_name | date_id_begin |
+---------+----------+------------+---------------+
| 1122 | 42 | promo_1 | 2020-02-01 |
+---------+----------+------------+---------------+
| 1122 | 42 | promo_1 | 2020-02-02 |
+---------+----------+------------+---------------+
| 1122 | 42 | promo_1 | 2020-02-03 |
+---------+----------+------------+---------------+
| 1122 | 42 | promo_1 | 2020-02-04 |
+---------+----------+------------+---------------+
| 1122 | 42 | promo_1 | 2020-02-05 |
+---------+----------+------------+---------------+
| 2244 | 41 | promo_2 | 2020-03-01 |
+---------+----------+------------+---------------+
| 2244 | 41 | promo_2 | 2020-03-02 |
+---------+----------+------------+---------------+
| 2244 | 41 | promo_2 | 2020-03-03 |
+---------+----------+------------+---------------+
我可以从循环内的某个范围内提取日期,但如何选择其他信息(good_id、store_id、promo_name)?
解决方案
一种选择是递归查询:
with cte as (
select good_id, store_id, promo_name, date_id_begin, date_id_end
from mytable
union all
select good_id, store_id, promo_name, dateadd(day, 1, date_id_begin), date_id_end
from cte
where date_id_begin < date_id_end
)
select good_id, store_id, promo_name, date_id_begin from cte
如果您有超过 100 天的范围,则需要option(max_recursion 0)
在查询末尾添加。
推荐阅读
- python-3.x - 致命错误:C1083 无法打开包含文件“zlib.h”
- python - 无法从运行在 data proc 集群上的 jupyter notebook 读取谷歌云存储桶中的文件
- python - Tkinter - 返回选定树视图的列号
- php - WordPress 数据库错误:[列计数与第 1 行的值计数不匹配]
- c - 子进程内存分配和收获子进程的目的
- css - div内的白色CSS箭头
- r - R:每日累计总数
- c - 如何指定 zlib 膨胀大小
- python - Python re.split 和 re.findall:分组和捕获
- json - 针对不同类别的弹性搜索过滤器