Ich versuche, meine Tabelle nach Woche zu zählen, aber die DATE_TRUNCT('week',date)
Funktion betrachtet Montag als Anfang der Woche, aber ich brauche für die Woche in Sonntag beginnen.Gruppe nach Woche auf Redshift
Dies ist die Abfrage, die richtig läuft, aber mit in Mondays ... ab
SELECT DATE_TRUNC('week',myDate) AS Reference,
column1 AS Item1,
column2 AS Item2,
COUNT(*) AS Volume,
COUNT(CASE WHEN status = 'status1' THEN 1 END) AS Status1,
COUNT(CASE WHEN status = 'status2' THEN 1 END) AS Status2,
COUNT(CASE WHEN status = 'status2' AND fase = '1' THEN 1 END) AS Fase1,
COUNT(CASE WHEN status = 'status2' AND fase = '2' THEN 1 END) AS Fase2,
COUNT(CASE WHEN status = 'status2' AND fase = '3' THEN 1 END) AS Fase3
FROM myTable
WHERE DATE_TRUNC('week',myDate) = DATE_TRUNC('week',TO_DATE('12/25/2016 00:00:00','MM/dd/yyyy'))
GROUP BY 1,
2,
3;
Bisher habe ich nur eine weitere Abfrage versucht, die selbst und ich weiß nicht laufen tut, warum, es sagt nur „Syntaxfehler an oder in der Nähe von "integer":
SELECT DATE_TRUNC('week',myDate) - integer '1' AS Reference,
column1 AS Item1,
column2 AS Item2,
COUNT(*) AS Item3,
COUNT(CASE WHEN status = 'status1' THEN 1 END) AS Status1,
COUNT(CASE WHEN status = 'status2' THEN 1 END) AS Status2,
COUNT(CASE WHEN status = 'status2' AND fase = '1' THEN 1 END) AS Fase1,
COUNT(CASE WHEN status = 'status2' AND fase = '2' THEN 1 END) AS Fase2,
COUNT(CASE WHEN status = 'status2' AND fase = '3' THEN 1 END) AS Fase3
FROM myTable
WHERE myDate between (DATE_TRUNC('week', TO_DATE('12/25/2016 00:00:00','MM/dd/yyyy') - integer '1') and (DATE_TRUNC('week', TO_DATE('12/25/2016 00:00:00','MM/dd/yyyy')) + integer '5')
GROUP BY 1,
2,
3;
auch wenn diese Abfrage propely runned, würde es die Zählung der Woche 18/Dec zeigen - 24/Dec und nicht die Woche 25/Dec - 31/Dec in der Fall 25/Dez. Das gleiche würde in anderen Tagen geschehen, wenn sie Sonntage sind.
EDIT: Ich habe gerade die Lösung in diesem Blog gefunden: https://blog.modeanalytics.com/date-trunc-sql-timestamp-function-count-on/ Es wurde die date_trunct Funktion eingeführt und jemand fragte die gleiche Frage in den Kommentaren. Dies ist meine gelöste Abfrage für zukünftige Referenz zu anderen:
SELECT date_trunc('WEEK',(myDate + interval '1 day'))- interval '1 day' AS Reference
column1 AS Item1,
column2 AS Item2,
COUNT(*) AS Volume,
COUNT(CASE WHEN status = 'status1' THEN 1 END) AS Status1,
COUNT(CASE WHEN status = 'status2' THEN 1 END) AS Status2,
COUNT(CASE WHEN status = 'status2' AND fase = '1' THEN 1 END) AS Fase1,
COUNT(CASE WHEN status = 'status2' AND fase = '2' THEN 1 END) AS Fase2,
COUNT(CASE WHEN status = 'status2' AND fase = '3' THEN 1 END) AS Fase3
FROM myTable
WHERE (date_trunc('WEEK',(myDate + interval '1 day'))- interval '1 day') = (DATE_TRUNC('week',TO_DATE('12/24/2016 00:00:00','MM/dd/yyyy') + interval '1 day' ) - interval '1 day')
GROUP BY 1,
2,
3;