2017-05-23 42 views
1

我在Redshift中出现了一个带有交叉连接的奇怪问题。 我正在生成日子,并希望通过一些ID加入他们。 示例查询是这样的:Redshift:交叉连接使数据消失

with ids as (
Select number as id 
from models.number_10000 
limit 10 
), 
day as (
SELECT 
TO_CHAR(DATEADD(day,num.number,CAST(DATEADD(day,-463,GETDATE()) AS DATE)),'YYYY-MM-DD') as date_string 
FROM 
(Select * from models.number_10000 limit 463) 
as num 
) 
SELECT 
    id,date_string 
from ids,day 

一切工作正常为止。 但是,如果我分组,那么我没有结果。

with ids as (
Select number as id 
from models.number_10000 
limit 10 
), 
day as (
SELECT 
TO_CHAR(DATEADD(day,num.number,CAST(DATEADD(day,-463,GETDATE()) AS DATE)),'YYYY-MM-DD') as date_string 
FROM 
(Select * from models.number_10000 limit 463) 
as num 
) 
SELECT 
    id,date_String 
from ids,day 
group by 1,2 

这是怎么发生的?我从来没有面对类似的东西。我想这是交叉连接和组合的结果,但它看起来很奇怪。 有什么想法?

回答

0

我会用下面的启动:

  1. 国家的JOIN明确(ANSI92风格)。
  2. 说明您希望显式分组的项目的名称。
  3. 此外 - 删除您的GROUP BY语句(因为您没有任何集合函数)并在您的select语句中有DISTINCT子句。
+0

它仍然是一样的,我想:用ID作为( 选择数量从models.number_10000 限制10 ID ), 一天( 选择 TO_CHAR(DATEADD(日,num.number, CAST(DATEADD(日,-463,GETDATE())AS DATE)), 'YYYY-MM-DD')从models.number_10000上限463) 为num ) 选择 不同DATE_STRING FROM (SELECT * \t id,date_String from ids CROSS JOIN day –