【问题标题】:Recreate postgres query to snowflake query with Seq8() and generator functions使用 Seq8() 和生成器函数将 postgres 查询重新创建为雪花查询
【发布时间】:2022-01-22 21:42:43
【问题描述】:

我在 postgres 中有一个表,查询如下:

 SELECT col_a, col_b, col_c, year1
    ,round(((year1::text || '-12-31')::date - d_start) / 30.5, 0) as mis
FROM (
    SELECT *, date_part('year', current_date) + generate_series(-2, 4) as year1
    FROM schema.table

我正在将此查询迁移到雪花:

SELECT col_a, col_b, col_c, year1
    ,round(((year1::text || '-12-31')::date - d_start) / 30.5, 0) as mis
FROM (
 SELECT *, YEAR(CURRENT_DATE) + ROW_NUMBER() OVER(ORDER BY seq8())-3 
 FROM TABLE(GENERATOR(ROWCOUNT => 7)) as year1
    from schame.table  

但在雪花中我面临错误,因为它不允许 from 声明 甚至在下面也尝试过,但数据结果不佳:

     SELECT col_a, col_b, col_c, year1
    ,round(((year1::text || '-12-31')::date - d_start) / 30.5, 0) as mis
FROM (
 SELECT *, YEAR(CURRENT_DATE) + ROW_NUMBER() OVER(ORDER BY seq8())-3 
 FROM TABLE(GENERATOR(ROWCOUNT => 7)) as year1
    ,
    from schame.table 

postgres 查询给出生成 year1 列值的结果:

2019 to 2025 repeatedly as

 |year1|
 |-----|
 |2019 |
 |2020 |
 |2021 |
 |2022 |
 |2023 |
 |2024 |
 |2025 |
 |2019 |
 |2020 |
 |2021 |
 |2022 |
 |2023 |
 |2024 |
 |2025 |

但在雪花中,它甚至会在 2025 年之后产生:

|year1|
 |-----|
 |2019 |
 |2020 |
 |2021 |
 |2022 |
 |2023 |
 |2024 |
 |2025 |
 |2026 |
 |2027 |
 |2028 |
 |2029 |
 |2030 |
 |2031 |
 |2032 |

我错过了什么

感谢您的帮助

【问题讨论】:

  • 嗨,我只运行了这部分查询,从 2019 年到 2025 年有 7 年。你也可以运行看看你是否得到那个或直到 2032 年。SELECT *, YEAR(CURRENT_DATE) + ROW_NUMBER() OVER(ORDER BY seq8())-3 FROM TABLE(GENERATOR(ROWCOUNT => 7)) 作为 year1。
  • 请分享正确的雪花查询。您共享的查询无法编译。

标签: sql postgresql snowflake-cloud-data-platform


【解决方案1】:

出于调试目的,我尝试了 Snowflake 中的子查询:

 SELECT *, YEAR(CURRENT_DATE) + ROW_NUMBER() OVER(ORDER BY seq8())-3 
 FROM TABLE(GENERATOR(ROWCOUNT => 7)) as year1

根据需要,结果是 2019 年到 2025 年:

代码中没有错误,除非您可以提供更多上下文。

【讨论】:

    【解决方案2】:

    与 cte (cy) as (select YEAR(CURRENT_DATE) + (ROW_NUMBER() OVER(ORDER BY seq8()))-3 as year1 FROM TABLE(GENERATOR(ROWCOUNT => 7))) select b.*,year1 from cte, schema.table b

    这给出了正确的结果。

    我发布的问题中的第三个查询是进行交叉连接,这就是它附加年份的原因。

    【讨论】:

      猜你喜欢
      • 2021-08-09
      • 1970-01-01
      • 2017-01-17
      • 2022-01-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多