SQL (MAX DATE -1)

mellowcrew

Lt. Commander
Registriert
Mai 2007
Beiträge
1.091
Hello,

ich stehe gerade auf der Leitung bei einem kleinen Select. Wahrscheinlich ist das für den ein oder die andere ein Klacks.

Folgendes:
Ich errechne ein Delta für bestimmte Werte zwischen zwei Monaten einer Tabelle durch 2 Views (siehe Beispiel unten). Immer der Vormonat - VorVormonat. Allerdings habe ich immer erst zur Mitte des Monats Daten vom Vormonat. Z.B. Mai - Juni....Wenn ich jetzt aber am 1.August meine Selects laufen lasse, dann zählt nicht mehr Mai-Juni, sondern logischerweise Juni-Juli (aber für Juli habe ich noch keine Daten-> kommen erst im Laufe des Folgemonats August).
Ich suche also nach einer Lösung, dass immer nur die verfügbaren Daten vom Vor- und dem VoVormonat genommen werden (aber eigentlich ohne Bezug zum akuelln Monat, wei sonst noch keine Daten da sind).
Bin mir nicht sicher, ob ich das verständlich erklären konnte;).

So schaut es aktuell aus:

View für den letzten Monat:
Select * From Table WHERE Monat = (Select Max(Monat) From table);

View für den Vorletzen Monat:
Select * From Table WHERE Monat =ADD_MONTHS (TRUNC(SYSDATE, 'MM'), -2);

Müsste es nicht sowas wie Max(Monat,-1) geben? Dann hätte ich mit MAX(Monat) immer den letzt verfügbaren + Max -1 (den maximalsten Monat davor).

MfG Mellow
 
Hi danke,

da kommt leider nichts retour, das hätt ich schon mal probiert. Mein Maximaldatum in der Tabelle ist aktuell nach wie vor der Juni. Mit Max -1 müsste ja eigentlich der Mai aufscheinen, tut es aber nicht.
 
Date

Nachdem ich keine Tage, sondern nur das Monat brauche sieht es in der Spalte so aus-> Für Mai: 01.05.24, Juni: 01.06.24
 
Zuletzt bearbeitet:
Von was für einer Datenbank sprechen wir da überhaupt? In MSSQL würde ich das über ROWNUMBER() lösen:

SQL:
SELECT *
FROM Table
WHERE Monat = (
        SELECT TOP 1 Monat
        FROM (
            SELECT Monat, ROW_NUMBER() OVER (ORDER BY Monat DESC) AS ROWNUM
            FROM Table
        ) AS S
        WHERE ROWNUM = 2
)
 
Wie schauts damit aus?

SQL:
SELECT *
FROM <table>
WHERE Monat = (SELECT ADDMONTHS(MAX(Monat),
                                IF(DAYOFMONTH(MAX(Monat)) >= 15, -1, -2))
               FROM <table>)

Steht das aktuelle Datum auf dem 15. oder später im Monat, holt er sich den Vormonat (-1) ansonsten den Vorvormonat (-2).
 
Oracle SQL.

@Krik : Das klingt auch vielversprechend. Hätt ich probiert, aber ist deine Syntax korrekt? Bekomme eine Fehlermeldung weil eine Klammer fehlt.
 
Ich hab das so aus dem Kopf geschrieben. Kann sein, dass eine Klammer irgendwo fehlt.

Edit: Ich habe nachgeschaut, die Klammern sind alle da.
 
ok komisch. Bei mir motzt er ..aber der Ansatz würde zumindest auch passen.
 
Zurück
Oben