Michał Kowalski Bazy danych
Temat: [SQL Server 2014] Inne od spodziewanego działanie funkcji...
W Oracle z powodzeniem stosowałem poniższą konstrukcje, by otrzymać wartość pola udf_nazwa_pliku dla np. najstarszej albo najnowszej daty.MAX(udf_nazwa_pliku_akt) KEEP (DENSE_RANK LAST ORDER BY eventdate) ostatni_plik
Na SQL Server chciałem otrzymać najświeższą cenę produktu dla ostatniej (najświeższej) daty
last_value([cena]) OVER (partition by [produkt_id] ORDER BY [data])
Przy powyższym zapisie dostaje inny wynik dla każdego kolejnego wiersza z tym samym produktem.
Nie wiem czemu
partition by [produkt_id]"nie rozciąga" okna na wszystkie krotki z tym samym produkt_id
Prawidłowo działa dopiero zapis:
LAST_VALUE([CENA_ZM]) OVER (ORDER BY [ObjectId3])ale tutaj nie wygląda na to że zwrócona kwota została wytypowana bo data była najświeższa/najstarsza tylko prawdopodobnie dlatego, że fizycznie rekord był pierwszy/ostatni.
https://msdn.microsoft.com/en-us/library/hh231517.aspx
Rank() over ... działa w identyczny sposób jak na bazie Oracle a w tym przypadku chyba nie do końca, lub coś robię źle...