Az adott oszlop adatainak legutóbbi módosítása óta eltelt napokat szeretném lekérni, például:
A TABLE_X tartalmazza
ID PDATE DATA1 DATA2
A 10-Jan-2013 5 10
A 9-Jan-2013 5 10
A 8-Jan-2013 5 11
A 7-Jan-2013 5 11
A 6-Jan-2013 14 12
A 5-Jan-2013 14 12
B 10-Jan-2013 3 15
B 9-Jan-2013 3 15
B 8-Jan-2013 9 15
B 7-Jan-2013 9 15
B 6-Jan-2013 14 15
B 5-Jan-2013 14 8
Példának okáért leegyszerűsítem a táblázatot.
Az eredmény a következő legyen:
ID DATA1_LASTUPDATE DATA2_LASTUPDATE
A 4 2
B 2 5
amely így szól: - A legutolsó frissítés 1. adata 4 napja, - A 2. adata legutóbbi frissítés 2 napja, - B adat1. utolsó frissítése 2 napja, - B adat2. utolsó frissítése 5 napja.
Az alábbi lekérdezés használata rendben van, de túl sokáig tart a befejezés, ha a valós táblára alkalmazom, amely sok rekordot tartalmaz, és hozzáadok 2 további adatoszlopot, hogy megtaláljam a legutóbbi frissítési napokat. Erre a célra a LEAD funkciót használom. Van más alternatíva a lekérdezés felgyorsítására?
with qdata1 as
(
select ID, pdate from
(
select a.*, row_number() over (partition by ID order by pdate desc) rnum from
(
select a.*,
lead(data1,1,0) over (partition by ID order by pdate desc) - data1 as data1_diff
from table_x a
) a
where data1_diff <> 0
)
where rnum=1
),
qdata2 as
(
select ID, pdate from
(
select a.*, row_number() over (partition by ID order by pdate desc) rnum from
(
select a.*,
lead(data2,1,0) over (partition by ID order by pdate desc) - data2 as data2_diff
from table_x a
) a
where data2_diff <> 0
)
where rnum=1
)
select a.ID,
trunc(sysdate) - b.pdate data1_lastupdate,
trunc(sysdate) - c.pdate data2_lastupdate,
from table_master a, qdata1 b, qdata2 c
where a.ID=b.ID(+) and a.ID=b.ID(+)
and a.ID=c.ID(+) and a.ID=c.ID(+)
Nagyon köszönöm.