2017-05-23 5 views
1

Ich habe ein seltsames Problem in Redshift mit einem Crossjoin. Ich erzeuge Tage und möchte sie mit einigen IDs verbinden. Die Beispielabfrage ist dies:Redshift: Cross-Join machen Daten verschwinden

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 

Alles funktioniert so weit in Ordnung. Wenn ich aber bis dahin gruppiere habe ich keine Ergebnisse.

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 

Wie ist das passiert? Ich habe noch nie etwas Ähnliches gesehen. Ich denke, es ist etwas mit dem Kreuz und der Gruppe, aber es scheint sehr seltsam. Irgendwelche Gedanken?

Antwort

0

würde ich mit folgendem beginnen:

  1. Staat Ihre JOIN explizit (ANSI92 Style).
  2. Geben Sie die Namen der Elemente an, die explizit gruppiert werden sollen.
  3. Darüber hinaus - entfernen Sie Ihre GROUP BY-Anweisung (wie Sie keine Aggregatfunktionen haben) und eine DISTINCT Klausel in Ihrer Select-Anweisung.
+0

Es ist immer noch das gleiche, habe ich versucht: mit ids als ( Select-Nummer als ID von models.number_10000 Grenze 10 ), Tag als ( SELECT TO_CHAR (DATEADD (Tag, num.number, CAST (DATEADD (Tag, -463, GETDATE()) AS DATE)), 'YYYY-MM-DD') als DATE_STRING FROM (Select * from models.number_10000 Limit 463) als num ) SELECT verschiedene \t id, date_String von IDs CROSS JOIN Tag –

Verwandte Themen