Rank() Over .... jetzt mal was anständiges ??
Allgemein T-SQL
Ich hatte mal einen Beitrag geschrieben, da war ein "ziemlich" konstruiertes Beispiel drin, welches die T-SQL-Funktion Rank() benutzt hat ....
Der hier war es ..... Beitrag ....
Na ja, jetzt habe ich die Rank() mal bei was nützlichem gebraucht .....
Kategorie Ich hatte mal einen Beitrag geschrieben, da war ein "ziemlich" konstruiertes Beispiel drin, welches die T-SQL-Funktion Rank() benutzt hat ....
Der hier war es ..... Beitrag ....
Na ja, jetzt habe ich die Rank() mal bei was nützlichem gebraucht .....
Also habe mit folgendes praktisches Beispiel
ausgedacht (Vorsicht Tabellenstruktur nicht normalisiert )
Es gibt eine Tabelle ProductOrders, welche das Produkt und den Bestelltermin enthält -> hier ein Auszug
Dann gibt es noch eine Tabelle ProductPrice mit den Preisen, die folgende Struktur hat
Aufgabe ist es nun zu jeder Order den "gültigen Preis" zu suchen, in Deutsch ...
Suche zu jeder Produkt (Order) aus der ProductOrder Tabelle den Preis aus der ProductPrice Tabelle, bei der dem grössten PriceValidFrom Datum entspricht, was kleiner als das ProductOrder Datum ist ....
Hört sich kompliziert an .... aber in SQL ist es einfach hinzuschreiben ->
selectproduct,productorder,pricevalidfrom,price from
(
select
po.product,
po.productorder,
pp.pricevalidfrom,
pp.price,
rank() over (partition bypp.product,po.productorder orderby PriceValidFromdesc) asrank
from
productorders po, ProductPricepp
where
pp.Product =po.Product and
po.ProductOrder >=pp.PriceValidFrom
)tmp
whererank = 1
So jetzt ist Sonntag abend und gleich kommt NAVI CIS .....
Gruß JJR
P.S.: Angenehmen Start in den Rosenmontag
Es gibt eine Tabelle ProductOrders, welche das Produkt und den Bestelltermin enthält -> hier ein Auszug
Product | ProductOrder |
A | 2011-08-01 00:00:00.000 |
A | 2011-02-11 03:27:43.800 |
B | 2010-03-09 12:39:44.823 |
C | 2010-11-11 11:14:20.360 |
Dann gibt es noch eine Tabelle ProductPrice mit den Preisen, die folgende Struktur hat
Product | PriceValidFrom | Price |
A | 2010-03-21 19:15:03.923 | 82,2264507007496 |
B | 2010-02-28 10:58:20.763 | 25,3385193101747 |
C | 2011-08-26 13:28:29.630 | 1,87757239206667 |
A | 2011-03-11 06:55:09.740 | 53,7625257144062 |
Aufgabe ist es nun zu jeder Order den "gültigen Preis" zu suchen, in Deutsch ...
Suche zu jeder Produkt (Order) aus der ProductOrder Tabelle den Preis aus der ProductPrice Tabelle, bei der dem grössten PriceValidFrom Datum entspricht, was kleiner als das ProductOrder Datum ist ....
Hört sich kompliziert an .... aber in SQL ist es einfach hinzuschreiben ->
selectproduct,productorder,pricevalidfrom,price from
(
select
po.product,
po.productorder,
pp.pricevalidfrom,
pp.price,
rank() over (partition bypp.product,po.productorder orderby PriceValidFromdesc) asrank
from
productorders po, ProductPricepp
where
pp.Product =po.Product and
po.ProductOrder >=pp.PriceValidFrom
)tmp
whererank = 1
So jetzt ist Sonntag abend und gleich kommt NAVI CIS .....
Gruß JJR
P.S.: Angenehmen Start in den Rosenmontag