2016-11-28 1 views
0

Ich habe eine Tabelle etl_control, die latest_id von x_data Tabelle jeden Tag speichert. Jetzt habe ich eine Anforderung, um die Anzahl der Zeilen für jeden Tag zu erhalten. Meine Idee ist es, eine Abfrage auszuführen, um die Anzahl basierend auf einer Bedingung x_data.id <= etl_control.latest_id für jeden Tag zu erhalten und die Anzahl zu erhalten.Abfrage Anzahl der Zeilen, wo ID ist weniger als eine Reihe von Werten in Redshift

Die Tabellenstrukturen sind wie folgt.

etl_control:

record_date  | latest_id | 
--------------------------------- 
2016-11-01  | 55   | 
2016-11-02  | 125   | 
2016-11-03  | 154   | 
2016-11-04  | 190   | 
2016-11-05  | 201   | 
2016-11-06  | 225   | 
2016-11-07  | 287   | 

x_data:

id    | value  | 
--------------------------------- 
10    | xyz   | 
11    | xyz   | 
21    | xyz   | 
55    | xyz   | 
101    | xyz   | 
108    | xyz   | 
125    | xyz   | 
142    | xyz   | 
154    | xyz   | 
160    | xyz   | 
166    | xyz   | 
178    | xyz   | 
190    | xyz   | 
191    | xyz   | 

Das Endergebnis sollte für jeden Tag die Anzahl der Zeilen in x_data haben. Ich habe eine Reihe von Variationen mit JOIN, WITH und COUNT (*) OVER versucht. Die größte Hürde ist jedoch der iterative Vergleich von x_data.id mit etl_control.latest_id.

Antwort

0

Wirklich leid, Leute. Ich habe die Antwort selbst erhalten, nachdem ich die Frage gepostet habe.

Die Abfrage ist wirklich einfach.

WITH data AS (
    SELECT e.latest_id 
    FROM x_data AS x, etl_control AS e 
    WHERE x.id <= e.latest_id) 
SELECT latest_id, count(*) FROM data GROUP BY latest_id; 

Dies erstellt im Grunde eine temporäre Tabelle mit Latest_id für jede Zeile wiederholt. Die letzte_ID ist immer größer oder gleich der ID von x_data.

Eine einfache Gruppe von auf dieser temporären Tabelle würde das erwartete Ergebnis liefern.

Verwandte Themen