2016-03-23 17 views
0

Ich arbeite an einem YoY Self-Join, um die Verkaufszahlen des Jahres und des letzten Jahres nebeneinander in der gleichen Tabelle zu sehen.dateadd in Redshift nicht Schaltjahr kompensieren

Die Abfrage etwa wie folgt aussieht:

Select a.date_column, a.sales_column as ty_sales, b.sales_column as ly_sales 

from sales_table a 

left join sales_table b 

on (dateadd(year, -1, a.date_column)) = b.date_column 

Diese in der Theorie sollte in Ordnung sein, das Problem ist, dass 2016.02.29 Datensätze 2015.03.01 Aufzeichnungen anschließen, der die Zahlen verursacht für 02-2016 aus sein.

Ist dies ein bekanntes Problem mit Rotverschiebung/Postgres?

Lassen Sie mich wissen, ob ich Ihnen zusätzliche Klarheit verschaffen kann.

+0

Warum haben Sie dies mit mysql, sql und postgresql markiert, wenn es nichts damit zu tun hat? –

+0

Es ist eine SQL-bezogene Frage, postgresql Syntax ist ziemlich gleichbedeutend mit Rotverschiebung, und MySQL für die Sichtbarkeit. Weil die Wahrscheinlichkeit hoch ist, dass eine Person mit MySQL vertraut ist, ist sie wahrscheinlich mit postgres/redshift vertraut. – masdawg

+0

@masdawg. . . Das "sql" -Tag bietet Sichtbarkeit. Sie sollten nur mit der Datenbank markieren, die Sie tatsächlich verwenden, und nicht mit externen Datenbanken. –

Antwort

1

Ich würde nicht sagen, dass es ein "bekanntes Problem" ist, es ist, wie sie sich entschieden haben, mit Schaltjahren umzugehen. Wenn du 2/29 für YoY vergleichst, an welchem ​​Tag würdest du es gerne vergleichen? Wenn Sie es mit 2/28 vergleichen, werden Sie dann auch 2/28 dieses Jahres mit 2/28 des letzten Jahres vergleichen? Sie vergleichen jetzt zwei Tage mit demselben Tag. Dann müssen Sie erklären, dass die Verkäufe aus dem letzten Jahr möglicherweise doppelt gezählt werden, wenn Sie alles zusammenrechnen.

Kurz gesagt, Sie müssen sich mit sehr spezifischen Geschäftsregeln darüber, wie Sie Schaltjahre handhaben, wenn es um die Berichterstattung geht und dann diese Regeln implementieren, und achten Sie sorgfältig darauf, diese Datumsfunktionen zu testen oft etwas willkürlich (für jede Datenbank/Sprache) wenn es um Schaltjahre geht.