You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何获取date_from到date_to之间的日期集合并拆分为单独行

解决方案

方法1:修正你现有的日期表关联方案

你之前用Cross Join没得到预期结果是因为漏了日期区间匹配的过滤条件,调整后的写法如下:

SELECT 
  t.good_id,
  d.all_date
FROM 
  你的原表名 t
CROSS JOIN 
  全量日期表名 d
WHERE 
  d.all_date BETWEEN t.from_date AND t.to_date

Cross Join本身会生成两个表的全量笛卡尔积,加上WHERE子句的过滤后,就只会保留落在商品对应日期间隔内的记录,刚好匹配你要的输出。

方法2:无现成日期表时用递归CTE实现

如果你没有提前建好的全量日期表,可以用递归CTE动态生成日期序列,适配MySQL 8.0+、PostgreSQL、SQL Server、Spark SQL等绝大多数主流SQL引擎:

WITH RECURSIVE date_series AS (
  -- 递归基:取每个商品的起始日期作为第一条记录
  SELECT good_id, from_date AS all_date, to_date FROM 你的原表名
  UNION ALL
  -- 递归逻辑:每次加1天,直到到达结束日期
  SELECT good_id, DATE_ADD(all_date, INTERVAL 1 DAY), to_date 
  FROM date_series
  WHERE all_date < to_date
)
SELECT good_id, all_date FROM date_series
ORDER BY good_id, all_date

方法3:Hive/Spark SQL专属简化写法

如果是在大数据场景用Hive或者Spark SQL,可以直接用sequence+explode函数实现,语法更简洁:

SELECT 
  good_id,
  explode(sequence(from_date, to_date, interval 1 day)) AS all_date
FROM 你的原表名

内容的提问来源于stack exchange,提问作者nhhthong

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 08:54:03