SQL Server 不能在用于GROUP BY子句的分组依据列表的表达式中使用聚合或子查询(Ms sql + Superset)

b09cbbtk  于 2022-11-21  发布在  其他
关注(0)|答案(1)|浏览(233)

我有一个表offset_table,其中写入了以分钟为单位的偏移量。该表将正好有1条记录和1列。
因此,我需要将这些分钟数添加到registration_time中。
我试过用下面的方法。但是没有运气。

方法1:

SELECT 
    DATEPART(week, CAST(DATEADD(MINUTE,(select offset from offset_table) , registration_time) as date)) as weeknumber
    FROM 
    registration
    GROUP BY
    DATEPART(week, CAST(DATEADD(MINUTE,(select offset from offset_table)  , registration_time) as date));

**错误:**不能在用于GROUP BY子句的分组依据列表的表达式中使用聚合或子查询。
方法2:

SELECT 
    DATEPART(week, CAST(DATEADD(MINUTE,(select offset from offset_table) , registration_time) as date)) as weeknumber
    FROM 
    registration
    GROUP BY
    weeknumber;

**错误:**无效的数据行名称'weeknumber'。
方法3:

DECLARE @offsetInMin int;
SET @offsetInMin = (select offset from offset_table);

 SELECT 
    DATEPART(week, CAST(DATEADD(MINUTE,@offsetInMin , registration_time) as date)) as weeknumber
    FROM 
    registration
    GROUP BY
    DATEPART(week, CAST(DATEADD(MINUTE,@offsetInMin  , registration_time) as date));

**方法3的问题:**此查询工作正常。但问题是,我需要在Apache超集中将此查询作为虚拟表查询。因此,如果我声明变量,则它会在超集中出错。
错误:虚拟数据集查询不能由多个语句组成”

所以,请指导我如何解决这个问题?

0yg35tkg

0yg35tkg1#

正如@Larnu所提到的,您可以对offset_table执行CROSS JOIN操作,因为它只包含1个值。我假设您需要使用GROUP BY来进行聚合?如果不是,则根本不需要在此处使用GROUP BY。如果您希望避免获得重复的记录,请使用SELECT DISTINCT

SELECT 
DATEPART(week, CAST(DATEADD(MINUTE, offset_table.offset, registration_time) as date)) as weeknumber
FROM 
registration
CROSS JOIN offset_table
GROUP BY
DATEPART(week, CAST(DATEADD(MINUTE, offset_table.offset, registration_time) as date));

相关问题