Benutzer mit den meisten Antworten
Abfrage abhängig von Datum

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ültigkeitabDatumwobei 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.21Im 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
Antworten
-
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
- Als Antwort vorgeschlagen Dimitar DenkovMicrosoft contingent staff, Moderator Montag, 28. Juni 2021 11:01
- Als Antwort markiert Dimitar DenkovMicrosoft contingent staff, Moderator Montag, 5. Juli 2021 14:28
-
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.
- Als Antwort vorgeschlagen Dimitar DenkovMicrosoft contingent staff, Moderator Montag, 28. Juni 2021 11:00
- Als Antwort markiert Dimitar DenkovMicrosoft contingent staff, Moderator Montag, 5. Juli 2021 14:28
-
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
- Als Antwort vorgeschlagen Dimitar DenkovMicrosoft contingent staff, Moderator Montag, 28. Juni 2021 11:05
- Als Antwort markiert Dimitar DenkovMicrosoft contingent staff, Moderator Montag, 5. Juli 2021 14:28
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.
- Als Antwort vorgeschlagen Dimitar DenkovMicrosoft contingent staff, Moderator Montag, 28. Juni 2021 11:00
- Als Antwort markiert Dimitar DenkovMicrosoft contingent staff, Moderator Montag, 5. Juli 2021 14:28
-
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
- Als Antwort vorgeschlagen Dimitar DenkovMicrosoft contingent staff, Moderator Montag, 28. Juni 2021 11:01
- Als Antwort markiert Dimitar DenkovMicrosoft contingent staff, Moderator Montag, 5. Juli 2021 14:28
-
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
- Als Antwort vorgeschlagen Dimitar DenkovMicrosoft contingent staff, Moderator Montag, 28. Juni 2021 11:05
- Als Antwort markiert Dimitar DenkovMicrosoft contingent staff, Moderator Montag, 5. Juli 2021 14:28
-
Hallo Michael,
Ich gehe davon aus, dass die Antworten Dir weitergeholfen haben. Solltest Du noch Rückfragen haben, gib bitte Bescheid.
Gruß,
DimitarBitte 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.