Teiid SQL异常 - Groupby子句中不存在字段

时间:2017-12-08 19:56:53

标签: sql teiid

我有一个使用date_time列生成小时聚合的查询。别名中的date_time列并显示在组中但我收到以下错误:

  

':org.teiid.jdbc.TeiidSQLException:TEIID30492 Remote   org.teiid.api.exception.query.QueryValidatorException:TEIID30492   [DB.foo.date_time]不能在聚合之外使用   函数,因为它们不存在于GROUP BY子句

我似乎无法弄清楚为什么会发生这种情况,因为我不会尝试将date_time列本身拉出来,只是小时(date_time)我将其别名为" hr&#34 ;

这是查询:

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"

1 个答案:

答案 0 :(得分:0)

这最终归因于Teiid评估查询的方式。 ... WITH DISTINCT rel, childD, dg MATCH (childD)-[tmp]-() WHERE tmp = rel RETURN rel, child, dg 子句中无法识别别名:

来自Teiid docs: 组中的列引用不能在SELECT子句中用于别名。

https://docs.jboss.org/author/display/teiid813final/GROUP+BY+Clause