У меня есть запрос, в котором используется столбец даты и времени для агрегирования по часам. Столбец datetime имеет псевдоним и присутствует в группе, но я получаю следующую ошибку:

': org.teiid.jdbc.TeiidSQLException: TEIID30492 Удаленный org.teiid.api.exception.query.QueryValidatorException: TEIID30492 [DB.foo.date_time] не может использоваться вне агрегатных функций, поскольку они не присутствуют в предложении GROUP BY

Кажется, я не могу понять, почему это происходит, так как я не пытаюсь вытащить сам столбец date_time, а только час (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"

0
foobarbaz 8 Дек 2017 в 22:56

1 ответ

Лучший ответ

В конечном итоге это произошло из-за того, как Тейид оценивает запросы. Псевдонимы не распознаются в пунктах GROUP BY:

Из документации Teiid: ссылки на столбцы в группе by нельзя использовать для псевдонимов в предложении SELECT.

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

0
foobarbaz 26 Май 2018 в 14:47