Teiid SQL 异常 - Groupby 子句中不存在字段
Teiid SQL Exception - Field not Present in Groupby Clause
我有一个使用 date_time 列生成小时聚合的查询。 date_time 列以别名出现在分组依据中,但我收到以下错误:
': org.teiid.jdbc.TeiidSQLException: TEIID30492 Remote
org.teiid.api.exception.query.QueryValidatorException: TEIID30492
[DB.foo.date_time] cannot be used outside of aggregate
functions since they are not present in a GROUP BY clause
我似乎无法弄清楚为什么会这样,因为我不尝试拉 date_time 列本身,只是 Hour(date_time) 我别名为 "hr"
这里是查询:
SELECT DISTINCT COUNT(*) as visits, hr
FROM
(SELECT DISTINCT
HOUR(date_time) AS hr, COUNT(DISTINCT(CONCAT(post_visid_high,CONCAT(post_visid_low,CONCAT(visit_num, visit_start_time_gmt))))) AS visits,
CASE
WHEN date_time BETWEEN '2017-12-07 00:00:00' AND '2017-12-07 23:59:59.999999' THEN 'yesterday'
WHEN date_time BETWEEN '2017-12-06 00:00:00' AND '2017-12-07 23:59:59.999999' THEN 'day_before'
END AS date_range
FROM
DB.foo
WHERE
date_time BETWEEN '2017-12-07 00:00:00' AND '2017-12-07 23:59:59.999999'
OR date_time BETWEEN '2017-12-06 00:00:00' AND '2017-12-07 23:59:59.999999'
AND report_suite IN ('X', 'Y', 'Z')
AND exclude_hit = 0
AND hit_source NOT IN (5,7,8,9)
AND post_pagename IN
(SELECT DISTINCT post_pagename
FROM DB.foo
WHERE post_pagename IS NOT NULL
AND post_pagename != (' '))) b
GROUP BY hr
为什么它认为存在 date_time 而不是 "hr"
这最终归因于 Teiid 评估查询的方式。 GROUP BY
子句中无法识别别名:
来自 Teiid 文档:
不能对 SELECT 子句中的别名进行分组依据中的列引用。
https://docs.jboss.org/author/display/teiid813final/GROUP+BY+Clause
我有一个使用 date_time 列生成小时聚合的查询。 date_time 列以别名出现在分组依据中,但我收到以下错误:
': org.teiid.jdbc.TeiidSQLException: TEIID30492 Remote org.teiid.api.exception.query.QueryValidatorException: TEIID30492 [DB.foo.date_time] cannot be used outside of aggregate functions since they are not present in a GROUP BY clause
我似乎无法弄清楚为什么会这样,因为我不尝试拉 date_time 列本身,只是 Hour(date_time) 我别名为 "hr"
这里是查询:
SELECT DISTINCT COUNT(*) as visits, hr
FROM
(SELECT DISTINCT
HOUR(date_time) AS hr, COUNT(DISTINCT(CONCAT(post_visid_high,CONCAT(post_visid_low,CONCAT(visit_num, visit_start_time_gmt))))) AS visits,
CASE
WHEN date_time BETWEEN '2017-12-07 00:00:00' AND '2017-12-07 23:59:59.999999' THEN 'yesterday'
WHEN date_time BETWEEN '2017-12-06 00:00:00' AND '2017-12-07 23:59:59.999999' THEN 'day_before'
END AS date_range
FROM
DB.foo
WHERE
date_time BETWEEN '2017-12-07 00:00:00' AND '2017-12-07 23:59:59.999999'
OR date_time BETWEEN '2017-12-06 00:00:00' AND '2017-12-07 23:59:59.999999'
AND report_suite IN ('X', 'Y', 'Z')
AND exclude_hit = 0
AND hit_source NOT IN (5,7,8,9)
AND post_pagename IN
(SELECT DISTINCT post_pagename
FROM DB.foo
WHERE post_pagename IS NOT NULL
AND post_pagename != (' '))) b
GROUP BY hr
为什么它认为存在 date_time 而不是 "hr"
这最终归因于 Teiid 评估查询的方式。 GROUP BY
子句中无法识别别名:
来自 Teiid 文档: 不能对 SELECT 子句中的别名进行分组依据中的列引用。
https://docs.jboss.org/author/display/teiid813final/GROUP+BY+Clause