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

如何将用户订阅起止日期表转换为按日维度的日历结构表?

将订阅起止日期表转换为每日订阅记录表

原表结构及数据

用户产品起始日期结束日期
Atrial2022-01-302022-03-01
Apaid2022-03-022023-03-02
Atrial2023-03-032023-04-02
Btrial2022-05-062022-06-05
Btrial2022-06-062022-07-06
Bpaid2022-07-072023-07-07
Ctrial2022-11-212022-12-21
Cpaid2022-12-222023-12-22
Cpaid2023-12-232024-12-22

目标表结构

需要生成按日期展示每个用户当日订阅产品的表,示例如下:

日期用户产品
2022-01-30Atrial
2022-01-31Atrial
.........
2022-03-02Apaid

原SQL的问题

你提供的SQL存在两处语法错误:

  • 子查询q缺少SELECT关键字,正确写法需明确指定查询字段
  • SELECT语句末尾多了一个冗余逗号,会导致语法报错

另外,固定生成2018-2030的日期数组会包含大量不需要的日期,建议根据原表的实际起止日期动态生成,提升查询效率。

修正后的SQL代码

WITH dates AS (
  SELECT date
  FROM UNNEST(GENERATE_DATE_ARRAY(
    (SELECT MIN(start_date) FROM table1),
    (SELECT MAX(end_date) FROM table1),
    INTERVAL 1 DAY
  )) AS date
)
SELECT 
  b.date,
  q.user,
  q.product
FROM (
  SELECT user, product, start_date, end_date
  FROM table1
) q
CROSS JOIN dates b
WHERE b.date BETWEEN q.start_date AND q.end_date
ORDER BY b.date, q.user

说明

  • 动态日期范围:通过原表的最小起始日期和最大结束日期生成必要的日期数组,避免无效数据占用资源
  • 语法修正:补全子查询的SELECT关键字,删除冗余逗号
  • 结果排序:增加ORDER BY按日期和用户排序,让输出结果更贴合目标格式

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 05:04:57