我有一个表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超集中将此查询作为虚拟表查询。因此,如果我声明变量,则它会在超集中出错。
错误:虚拟数据集查询不能由多个语句组成”
所以,请指导我如何解决这个问题?
1条答案
按热度按时间0yg35tkg1#
正如@Larnu所提到的,您可以对offset_table执行
CROSS JOIN
操作,因为它只包含1个值。我假设您需要使用GROUP BY
来进行聚合?如果不是,则根本不需要在此处使用GROUP BY
。如果您希望避免获得重复的记录,请使用SELECT DISTINCT
。