2010-12-03 5 views
0

Ich habe MySQL db, die Ereignisdatum und 3 Bereiche enthält, dh von1 bis 1, von2 bis 2, von3 bis jeder Bereich hat einen anderen Preis, dh von1 bis 1 Rate1, from2-to2 rate2, ...SQL-Abfrage für die Suche nach einem Wert in mehreren Bereichen

das sind also 3 Spalten für jeden Bereich: von, bis und Rate.

ich versuche, die Abfrage zu finden, die die Rate für einen bestimmten Monat zurückgibt, was bedeutet, dass der Bereich, in dem sich der Monat befindet, zurückgegeben wird und die Rate dieses Bereichs zurückgibt.

irgendwelche Ideen?
danke!

Antwort

0

Ihr Datenmodell scheint nicht normalisiert zu sein. Sie sollten morjas Vorschlag zum Erstellen einer zusätzlichen Tabelle berücksichtigen.

Unten ist eine wirklich hässliche Abfrage, die überprüft, ob ein Datum in einem der drei Bereiche ist, und gibt dann die passende Rate zurück.

select case 
     when date '2010-12-05' between range1_from and range1_to then range1_rate 
     when date '2010-12-05' between range2_from and range2_to then range2_rate 
     when date '2010-12-05' between range3_from and range3_to then range3_rate 
     end as rate 
    from events 
where date '2010-12-05' between range1_from and range1_to 
    or date '2010-12-05' between range2_from and range2_to 
    or date '2010-12-05' between range3_from and range3_to; 
+0

danke. Was meinst du mit "nicht normalisiert"? und was macht das Keyword "date"? –

+0

Das Schlüsselwort date ist eine Möglichkeit, ein Datumsliteral anzugeben. Sie teilen der Datenbank mit, dass diese Zeichenfolge als Datum behandelt werden soll. – Ronnis

2

Wenn Sie eine zusätzliche Tabelle nur für die Bereiche erstellen, würden Sie Ihr Schema in normaler Form behalten und Sie könnten einfach die richtige Rate auswählen: TABLE-Bereich, COLUMNS from, to, rate. Mit einem Fremdschlüssel, der mit Ihrem ursprünglichen Tisch verknüpft ist. Dann könntest du Rate FROM Bereich WHERE "Datum"> = von AND "Datum" < = zu wählen.

Verwandte Themen