Avatar
petr.chatar.anton:27. srpna 12:02

Ahoj,
mám podobnou tabulku:

PPV prefix kod castka platn_od
16d OSTEN 107 21000 20100101
105a ANTO 107 27000 20120101
105a ANTO 107 29000 20150701
118a WANN 107 15000 20100101
118a WANN 105 18000 20100301
118a WANN 107 28000 20180101
118a WANN 107 29500 20180801
3250a JOUZ 107 31000 20170101
3367c LAVI 107 30500 20170101

Je výsledkem dotazu:

select str(oscis) + oscis_vzt as PPV,prefix_jm, kod, castka, platn_od
from DATRV
where platn_od < 20180901 and kod < 108

Potřeboval bych z této tabulky vybrat vždy ten záznam pro skupinu stejných PPV, kde je nejvyšší platn_od .
Děkuju za pomoc.
 
Odpovědět 27. srpna 12:02
Avatar
Odpovídá na petr.chatar.anton
Matúš Olejník:27. srpna 13:06

Najoinuješ tabuľku samú na seba s tým, že PPV sa musí rovnať a platn_od v prvej tabuľke je menšia ako v tej ktorej ktorú pripájaš. Takže všetko sa ti pospája s tým že na pravej strane ti zostane nejaký PPV prázdny a vtedy vieš, že v tom prípade bola platn_od najväčšia. Inak tie názvy stĺpcov by bolo dobré asi troška pomeniť, či už dať to do angličtiny, nepísať jedno veľkými a iné malými písmenami a platn_od dať ako dátum

SELECT t.*
FROM DATRV t
LEFT OUTER JOIN DATRV tmp
ON t.PPV = tmp.PPV AND t.platn_od < tmp.platn_od
WHERE tmp.PPV IS NULL;
Nahoru Odpovědět 27. srpna 13:06
/* I am not sure why this works but it fixes the problem */
Avatar
plelovsky
Člen
Avatar
plelovsky:28. srpna 13:34
WITH tmp AS (
    SELECT *, R_N = ROW_NUMBER() OVER (PARTITION BY oscis, oscis_vzt ORDER BY platn_od DESC)
    FROM DATRV
    WHERE platn_od < 20180901 AND kod < 108
)
SELECT STR(oscis) + oscis_vzt as PPV, prefix_jm, kod, castka, platn_od
FROM tmp
WHERE R_N = 1
;
 
Nahoru Odpovědět 28. srpna 13:34
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 3 zpráv z 3.