【问题标题】:How to join generate_series and an array如何加入 generate_series 和数组
【发布时间】:2019-08-14 21:43:26
【问题描述】:

我想使用generate_series() 生成列列表并将其加入特定数组(值列表,例如[1, 2, 3]),我的预期结果如下所示:

Day        | Code
2019-08-01 |  1
2019-08-02 |  1
2019-08-03 |  1
2019-08-01 |  2
2019-08-02 |  2
2019-08-03 |  2
2019-08-01 |  3
2019-08-02 |  3
2019-08-03 |  3

这个查询:

SELECT generate_series(timestamp '2019-08-01'
                     , timestamp '2019-08-03'
                     , interval  '1 day') AS DAY, 1 AS CODE;

会给我结果:

Day        | Code
2019-08-01 |  1
2019-08-02 |  1
2019-08-03 |  1

那么如何更新查询以获得预期的结果呢?

【问题讨论】:

  • 我没有看到您在查询中提到的 array。请始终公开您的 Postgres 版本。

标签: sql postgresql cross-join generate-series set-returning-functions


【解决方案1】:

这是产生您想要的结果的众多方法之一正是

SELECT day::date, code
FROM   generate_series(timestamp '2019-08-01'
                     , timestamp '2019-08-03'
                     , interval  '1 day') day
CROSS JOIN unnest ('{1,2,3}'::int[]) code;  -- using an actual array here

重点是:您需要 CROSS JOIN 来生成笛卡尔积。

【讨论】:

    猜你喜欢
    • 2023-04-11
    • 1970-01-01
    • 1970-01-01
    • 2021-08-01
    • 2011-12-09
    • 1970-01-01
    • 1970-01-01
    • 2012-11-05
    • 1970-01-01
    相关资源
    最近更新 更多