2016-09-22 6 views
1

a (Probe) Tabelle wie folgt gegeben:Wählen Sie Bereich auf einer anderen Spalte basiert

PERIOD ORD DATA... 
Dec16 1 
Sep16 3 
Aug16 4 
Jul16 5 
Jun16 7 
May16 8 
Apr16 9 
Mar16 11 
Feb16 12 
Jan16 13 
Dec15 15 
Nov15 16 
Oct15 17 
Sep15 19 
Aug15 20 
Jul15 21 
Jun15 23 
May15 24 
Apr15 25 
Mar15 27 
Feb15 28 
Jan15 29 

wo ZEIT ein String ist, wie würde ich alle Zeilen zwischen bestimmten Perioden abfragen z.B. zwischen PERIOD = 'Mar16' und 'Jun15' (inklusive). Gibt es eine Möglichkeit, die ORD-Spalte in der SQL-Abfrage zu nutzen, um den Wertebereich abzurufen?

+0

Bitte markieren Sie Ihre Frage mit der Datenbank Sie verwenden. –

+0

DB in Frage war Netezza – geofrey

+0

Ich lernte auch etwas. Ich habe noch nie von Netezza gehört ... –

Antwort

2

aternative zu Gordon, könnte dies auf Ihrem RDBMS arbeiten je

SELECT * 
FROM thetable 
WHERE ORD BETWEEN (SELECT ORD FROM thetable WHERE PERIOD ='Mar16') 
       AND (SELECT ORD FROM thetable WHERE PERIOD ='Jun15') 
+0

Gearbeitet! Vielen Dank! – geofrey

0

Sie würden den Zeitraum in ein Datum konvertieren und diesen zum Vergleich verwenden. Zum Beispiel unterstützen einige Datenbanken to_date() und es würde wie folgt aussehen:

where to_date(period, 'MonYY') between to_date('Jun15', 'MonYY') and to_date('Mar16', 'MonYY') 

Beachten Sie, dass die spezifische Funktion der Periode auf ein Datum für die Umwandlung von Datenbank unterscheidet, das ist (noch?) Auf die Frage angegeben. Aber das gibt Ihnen eine Vorstellung davon, wie es geht.

Und wenn Sie die Perioden als Zeichenfolge speichern möchten, sollten Sie YYYY-MM-Formate verwenden. Dies sortiert korrekt und ermöglicht Ihnen, Ungleichheitsvergleiche zu verwenden.

+0

könnte nützlich sein, wenn es nur Monate sind, aber in meinem Fall hatten wir auch Viertelperiodenwerte, z. '1Q16' funktioniert möglicherweise nicht mit einer toDate-Funktion – geofrey

Verwandte Themen