Witam,
Posiadam zapytanie:
SELECT t.ID_TOWARU, dmp.CENA AS CENA_ZAKUPU_NETTO, ct.CENA AS CENA_SPRZEDAZY_BRUTTO,
t.NAZWA_VAT_SPRZED AS VAT FROM towary t JOIN DOK_MAGAZYNOWE_POZ dmp
on t.ID_TOWARU = dmp.ID_TOWARU JOIN DOK_MAGAZYNOWE dm ON dm.ALT_DOK_MAG = dmp.ALT_DOK_MAG
JOIN CENY_TOWAROW ct on dmp.ID_TOWARU = ct.ID_TOWARU JOIN AKT_STAN_MAG asm
on ct.ID_TOWARU = asm.ID_TOWARU WHERE (dmp.ID_TOWARU = 002070 or dmp.ID_TOWARU = 002071)
and asm.ILOSC > 0 and (dm.SYMBOL_KWITU = 'PZ' OR dm.SYMBOL_KWITU = 'PZF') AND ct.ID_GRUPY_CEN = 2 ORDER BY t.ID_TOWARU ASC, dm.DATA_UTWORZENIA DESC
I otrzymuje rekordy:
ID_TOWARU, CENA_ZAKUPU_NETTO, CENA_SPRZEDAZY_BRUTTO, NAZWA_VAT_SPRZED
002070 90.6500 139.00 22%
002070 90.6500 139.00 22%
002070 87.2200 139.00 22%
002070 87.2200 139.00 22%
002070 95.0600 139.00 22%
002070 95.0600 139.00 22%
002070 93.1000 139.00 22%
002070 93.1000 139.00 22%
002071 110.7400 179.00 22%
002071 110.7400 179.00 22%
002071 110.7400 179.00 22%
002071 122.5000 179.00 22%
002071 122.5000 179.00 22%
002071 122.5000 179.00 22%
002071 104.0000 179.00 22%
002071 104.0000 179.00 22%
Natomiast chciałbym to przerobić tak, by wyniki wyglądały tak:
002070 90.6500 139.00 22%
002071 110.7400 179.00 22%
Czyli dla ID ma się nie powtarzać, a z powyższych wyników ma brać sobie pierwszy rekord.
Wedle tego zapytania, pierwszy wynik dla ID to ten z najświeższą datą, inne mnie nie obchodzą.
Próbowałem dodać DISTINCT:
SELECT DISTINCT t.ID_TOWARU, dmp.CENA AS CENA_ZAKUPU_NETTO, ct.CENA AS CENA_SPRZEDAZY_BRUTTO,
t.NAZWA_VAT_SPRZED AS VAT FROM towary t JOIN DOK_MAGAZYNOWE_POZ dmp
on t.ID_TOWARU = dmp.ID_TOWARU JOIN DOK_MAGAZYNOWE dm ON dm.ALT_DOK_MAG = dmp.ALT_DOK_MAG
JOIN CENY_TOWAROW ct on dmp.ID_TOWARU = ct.ID_TOWARU JOIN AKT_STAN_MAG asm
on ct.ID_TOWARU = asm.ID_TOWARU WHERE (dmp.ID_TOWARU = 002070 or dmp.ID_TOWARU = 002071)
and asm.ILOSC > 0 and (dm.SYMBOL_KWITU = 'PZ' OR dm.SYMBOL_KWITU = 'PZF') AND ct.ID_GRUPY_CEN = 2 ORDER BY t.ID_TOWARU ASC, dm.DATA_UTWORZENIA DESC
Error: ORDER BY items must appear in the select list if SELECT DISTINCT is specified.
Próbowałem dodać Group By:
SELECT t.ID_TOWARU, dmp.CENA AS CENA_ZAKUPU_NETTO, ct.CENA AS CENA_SPRZEDAZY_BRUTTO,
t.NAZWA_VAT_SPRZED AS VAT FROM towary t JOIN DOK_MAGAZYNOWE_POZ dmp
on t.ID_TOWARU = dmp.ID_TOWARU JOIN DOK_MAGAZYNOWE dm ON dm.ALT_DOK_MAG = dmp.ALT_DOK_MAG
JOIN CENY_TOWAROW ct on dmp.ID_TOWARU = ct.ID_TOWARU JOIN AKT_STAN_MAG asm
on ct.ID_TOWARU = asm.ID_TOWARU WHERE (dmp.ID_TOWARU = 002070 or dmp.ID_TOWARU = 002071)
and asm.ILOSC > 0 and (dm.SYMBOL_KWITU = 'PZ' OR dm.SYMBOL_KWITU = 'PZF') AND ct.ID_GRUPY_CEN = 2 GROUP BY t.ID_TOWARU ORDER BY t.ID_TOWARU ASC, dm.DATA_UTWORZENIA DESC
Column 'DOK_MAGAZYNOWE_POZ.CENA' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.
No dobra, ale jaką aggregate function jestem w stanie dać dla ceny? First() nie działa.