none
Abfrage abhängig von Datum RRS feed

  • Frage

  • Hallo zusammen,

    ich knoble schon lange daran, wie ich fogenden Zusammenhang in eine Abfrage bekomme:

    TabelleA Artikelnummer und Bestelldatum,
    TabelleB mit Artikenummer und Preis mit GültigkeitabDatum

    wobei z.B. Artikel A in der Tabelle B mit mehreren Datensätzen steht

    Satz 1 Artikel A Preis 10 € gültigab 1.1.20,
    Satz 2 Artikel A Preis 12 € gültig ab 1.7.20,
    Satz 3 Artikel A Preis 9 € gültig ab 1.1.21

    Im Ergebnis sollte der Preis für Artikel A zum Bestelldatum stehen.

    Kann mir jemand einen Tipp geben, wie ich die Abfrage aufbauen muss?

    Danke für Hinweise!

    Gruß

    Michael


    Montag, 14. Juni 2021 17:25

Antworten

Alle Antworten

  • Hallo MH47,

    Du kannst mal schauen ob das für Dich passt:

    set dateformat ymd;
    
    CREATE TABLE #Bestellungen (ID INT, Artikelnummer INT, Bestelldatum Datetime)
    CREATE TABLE #Preise (LDFNR INT, Artikelnummer_FK INT, Preis MONEY, GültigAbDatum Datetime)
    
    INSERT INTO #Bestellungen SELECT 1,4711,'2020-01-04'
    
    INSERT INTO #Preise SELECT 1,4711, 10, '2020-01-01'
    INSERT INTO #Preise SELECT 2,4711, 12, '2020-07-01'
    INSERT INTO #Preise SELECT 3,4711, 09, '2021-01-01'
    
    SELECT *
    FROM (
    	SELECT *, 
    	DATEADD (day, -1, LAG (GültigAbDatum, 1, 0) OVER (PARTITION BY Artikelnummer ORDER BY GültigAbDatum DESC)) AS GültigBisDatum
    	FROM #Bestellungen b
    		LEFT JOIN #Preise p ON (p.Artikelnummer_FK = b.Artikelnummer)
    ) AS t1
    WHERE Bestelldatum BETWEEN GültigAbDatum AND GültigBisDatum
    ORDER BY GültigAbDatum
    
    DROP TABLE #Bestellungen
    DROP TABLE #Preise

    Schönen Abend.

    Montag, 14. Juni 2021 20:09
  • Moin,

    nach Artikel joinen, nach "gültig ab" sortieren, die auswählen, bei denen "gültig ab" kleiner gleich ist als das Bestelldatum, und das erste Ergebnis nehmen.


    Evgenij Smirnov

    http://evgenij.smirnov.de

    Montag, 14. Juni 2021 20:10
  • Oder als SQL dann

    ... left join ( select top 1 preis from preistab p where artikel = p.artikel
    and bestelldatum >= p.preisdatum order by artikel, gültigab ) p


    Montag, 14. Juni 2021 21:47
  • Hallo Michael,

    Ich gehe davon aus, dass die Antworten Dir weitergeholfen haben. Solltest Du noch Rückfragen haben, gib bitte Bescheid.

    Gruß,
    Dimitar


    Bitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip „IT-Pros helfen IT-Pros“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können.

    Montag, 5. Juli 2021 14:28
    Moderator