Portál AbcLinuxu, 10. května 2025 23:22
potřebuji vrátit řádky (Stačí id) s nejvyšším datumem pro každý stroj
id |stroj |opraven
1 pluh 1.1.2001
2 lopata 5.2.2001
3 pluh 3.3.2001
4 vidle 3.3.2001
by mělo vrátit
2
3
4
Řádek s id 1 chybí, protože pro pluh má řádek 3 vyšší datum
Prosím o pomoc s tvorbou dotazu
Řešení dotazu:
Ahoj
Pokud to ma byt v SQL, tak potrebujes max()
(a k nemu samozrejme group by
)
Dejv
create table t
(
id number not null,
stroj varchar2(10) not null, -- FK?
opraven date not null
);
insert into t values (1, 'pluh', sysdate-10);
insert into t values (2, 'lopata', sysdate);
insert into t values (3, 'pluh', sysdate);
insert into t values (4, 'vidle', sysdate);
commit;
select * from t;
ID STROJ OPRAVEN
== ====== ===================
1 pluh 2013-01-06 07:52:45
2 lopata 2013-01-16 07:52:53
3 pluh 2013-01-16 07:52:54
4 vidle 2013-01-16 07:52:54
select id
from (select id, row_number() over (partition by stroj order by opraven desc) as r
from t)
where r = 1;
ID
==
2
3
4
zbytek si dohledej za domácí úkol. Včetně ošetření toho, co by se stalo kdybys měl stejné maximální datum ve více řádcích jednoho stroje...
SELECT t.* FROM (SELECT stroj, MAX(opraven) as max_opr FROM tabulka GROUP BY stroj) AS m LEFT JOIN tabulka AS t ON t.stroj = m.stroj AND t.opraven = m.max_oprPokud ale jde o nějaké netriviální množství dat, raději bych si přidal do tabulky strojů sloupec s datem poslední opravy, který by byl vypočítáván podle obsahu tabulky s opravami.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.