SQL生成连续列表

有时候 需要根据 给定的 开始数据 和 结束数据,生成一段连续序列
比如 给定 开始日期 和 结束日期 生成 连续日期列表。
又或者 给定 开始数字 和 结束数字 生成连续数字列表
就像这样

1
2
3
4
5
6
7
8
9
10
11
12
13
14
start_date: 2024-01-01
end_date: 2024-01-10

res:
2024-01-01
2024-01-02
2024-01-03
2024-01-04
2024-01-05
2024-01-06
2024-01-07
2024-01-08
2024-01-09
2024-01-10

这里 一般只需要处理三个地方

  • 计算 开始值 和 结束值 的 差值
  • 根据 差值 生成连续序列
  • 把 开始值 加上 连续序列的值

这里 以 doris 和 hive 来举例

Doris生成连续日期

生成 2024-01-012024-01-10的连续日期序列

  • 使用 datediff计算差值
    DATEDIFF - Apache Doris

    1
    select datediff('2024-01-10', '2024-01-01')
  • 利用 explode_number 生成连续序列
    EXPLODE_NUMBERS - Apache Doris

    1
    2
    select e1
    from (select '2024-01-01' k1) as t lateral view explode_numbers(datediff('2024-01-10', '2024-01-01')) tmp1 as e1;
  • 开始值 加上 连续序列
    DAYS_ADD - Apache Doris

    1
    2
    select e1, k1, to_date(days_add(k1, e1))  
    from (select '2024-01-01' k1) as t lateral view explode_numbers(datediff('2024-01-10', '2024-01-01') + 1) tmp1 as e1;

本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!