Teradata SQL - CREATE table as select - таблица заполняет набор результатов, отличный от выполняемого запроса вручную

У меня есть запрос, который обычно идет

SELECT * 
FROM BILL_HISTORY a

JOIN 
(
Sel *
from SERVICE_INFO

Qualify Row_Number() OVER (PARTITION BY Service, Product_Code1, 
Product_Code2 ORDER BY Effective_Date1 DESC, Effective_Date2 DESC) = 1
) b
ON a.SERVICE = b.SERVICE

Ожидаемый результат - 6 месяцев прошлых счетов с дополнительными столбцами из SERVICE_INFO. Если я выполню этот запрос вручную с предложением WHERE для определенного идентификатора службы, я получу ожидаемый результат. Однако, если я выполняю тот же запрос, заключенный в CREATE VOLATILE TABLE ... AS (SELECT * ...), тогда, когда я запрашиваю тот же идентификатор службы, я получаю только самый последний идентификатор счета для этой службы.

Какие-либо причины, почему это может произойти? Тот же результат, если я создаю таблицу как perm или volatile. Настоящая голова-скребок...

РЕДАКТИРОВАТЬ: показать общий подзапрос, который был сделан на JOIN, поскольку это, как представляется, связано с причиной проблемы.

1 ответ

Хотя я не знаю причину, по которой это произошло, я смог решить проблему, сначала поместив подзапрос к объединенной таблице в свою собственную изменчивую таблицу, а затем выполнив объединение для исходного запроса.

Вместо

JOIN 
 (
 Sel *
 from SERVICE_INFO

 Qualify Row_Number() OVER (PARTITION BY Service, Product_Code1, 
 Product_Code2 ORDER BY Effective_Date1 DESC, Effective_Date2 DESC) = 1
 ) b

Первый

 Create Multiset Volatile Table SERVICE_INFO_VT AS (
 Sel *
 from SERVICE_INFO

 Qualify Row_Number() OVER (PARTITION BY Service, Product_Code1, 
 Product_Code2 ORDER BY Effective_Date1 DESC, Effective_Date2 DESC) = 1

затем выполните исходный запрос

 SELECT * 
 FROM BILL_HISTORY a

 JOIN SERVICE_INFO_VT b
 ON a.SERVICE = b.SERVICE

который возвращал те же результаты, независимо от того, выполнялся ли он как ручной запрос или заключался в оператор CREATE TABLE / VOLATILE TABLE

Другие вопросы по тегам