我有这样一个问题:

With cte as(
    Select min(date1) as min_date,
           max(date1) as max_date,
           id,
           city,
           time_id
   From some_table
   Group by id, city, time_id
),

range as
(select dateadd('month', row_number()over(order by null), (select min_date from cte)) as date_expand
From table(generator (row_count => 12*36))))

Select * from range;

它给出了以下错误:

有没有办法在dateadd函数的第三个参数中传递变量?因为我的cte将根据group by子句返回许多min_日期.蒂亚

推荐答案

是的,select中的sub select只需要返回一行,您的CTE中有许多行.

如果你做了这样的事,你的质疑对我来说更有意义:

With some_table as (
    SELECT * FROM VALUES
        (1, 'new york', 10, '2020-01-01'::date),
        (1, 'new york', 10, '2020-02-01'::date),
        (2, 'christchurch', 20, '2021-01-01'::date)
    v(id, city, time_id, date1)
), cte as (
    Select 
       min(date1) as min_date,
       max(date1) as max_date,
       id,
       city,
       time_id
   FROM some_table
   GROUP BY 3,4,5
), range as (
    SELECT 
        id, city, time_id,
        dateadd('month', row_number()over(partition by id, city, time_id ORDER BY null), min_date) as date_expand
    FROM table(generator(rowcount =>12*36))
    CROSS JOIN cte
)
Select * from range;

但如果你的CTE变成这样:

With cte as (
    Select 
       min(date1) as min_date,
       max(date1) as max_date
   FROM some_table
), range as (
    SELECT 
        dateadd('month', row_number()over(ORDER BY null), (select min_date from cte)) as date_expand
    FROM table(generator(rowcount =>2*4))
)
Select * from range;

这是可行的,因为只返回一个min_date值.

或者你可以找到最小的min_日期,比如:

WITH cte as (
    Select 
       min(date1) as min_date,
       max(date1) as max_date,
       id,
       city,
       time_id
   FROM some_table
   GROUP BY 3,4,5
), range as (
    SELECT 
        dateadd('month', row_number()over(ORDER BY null), (select min(min_date) from cte)) as date_expand
    FROM table(generator(rowcount =>2*3))

)
Select * from range;

Sql相关问答推荐

使用SQL/R循环查找邻居

Select /过滤postgr中的树 struct

如何在SQL Server中列出从当前月份开始的过go 10年中的月份

将主表与历史表连接以获取主表的当前汇率以及历史表中的上一个和最后一个汇率

解析SQL Server中的嵌套JSON

按分隔符和总和分析字符串

从结果SQL查询中排除空值

SQL递归.硬币兑换问题.-try 使用递归解决硬币找零问题

在SQL中将项分配给容器

VS代码无法识别SQL代码中带括号的字符串

YEAR 函数仍然不可SARGable 吗?

MySQL中的递归查询邻接表深度优先?

SQL根据另一列的顺序和值获取组中的最后一列

如何解释 SQL Server 中的 Foxpro 语法?

在SQL中实现表格数据透视类型报表

多行状态下的分组查询判断状态

为什么在事务中未被后续使用的CTE执行SELECT...FOR UPDATE无效?

Django only() 和 values() 不适用于 prefetch_related()

如何对 SQL 表中的连续时间戳进行分组?

在 BigQuery 数据集中查找表大小和占总数据集大小的百分比