SQL max() függvénnyel csoportosított rekordok további mezői

SQL max() függvénnyel csoportosított rekordok további mezői
2017-01-04T19:18:32+01:00
2017-01-06T12:20:51+01:00
2022-12-04T06:55:37+01:00
Weisz Imre
Adott egy közműórák leolvasásait nyilvántartó tábla (LEOLV) az alábbi mezőkkel:
óra gyári száma (GYSZAM)
leolvasás dátuma (DATUM)
óraállás (ALLAS)
Év közben vannak leolvasások, nem minden órához azonos időpontban és lehetnek kihagyott
hónapok is. A következő év megkezdéséhez kellenének az órákhoz tartozó utolsó leolvasási dátumok és óraállások.
Az órákhoz tartozó utolsó leolvasás dátumának lekérdezése még megy:

Select GYSZAM, max(Udatum) from LEOLV group by Gyszam
Azonban az utolsó óraálláshoz tartózó óraállás egy lekérdezésben való lekérdezésével nem boldogulok.
Mutasd a teljes hozzászólást!
illetve a legvégére nem kell a GROUP GY gyszam !!! bocs!
Mutasd a teljes hozzászólást!

  • Sziasztok!

    A korábbi hozzászólásokban lévő verziókból nekem úgy tűnik, hogy hiányzik a külső select.
    Így működnie kell:

    SELECT maxdates_by_gyszam.gyszam, maxdates_by_gyszam.maxdate, alldates_by_gyszam.allas

    FROM

    (
    (SELECT gyszam, max(datum) AS maxdate
    FORM leolv
    GROUP BY gyszam) AS maxdates_by_gyszam

    LEFT JOIN

    (SELECT gyszam, datum, allas
    FROM leolv) AS alldates_by_gyszam

    ON
    maxdates_by_gyszam.gyszam = alldates_by_gyszam.gyszam
    AND
    maxdates_by_gyszam.maxdate = alldates_by_gyszam.datum
    );
    Mutasd a teljes hozzászólást!
  • Esetleg megpróbálhatod ezt is, hatha nem szall el memoria hibaval:

    Select l.gyszam, l.udatum, l.allas from leolv l where not exists ( select 1 from leolv l2 where l.gyszam = l2.gyszam and l.udatum < l2.udatum)
    Mutasd a teljes hozzászólást!
  • PolyJoe válaszát (2017.01.04. 22:13) fogadom el a 2017.01.04. 22:56-kor tett kiegészítéssel :

    SELECT gyszam,allas,udatum FROM leolv t1 WHERE udatum IN (SELECT MAX(udatum) FROM leolv t2 WHERE
    t2.gyszam=t1.gyszam)

    Úgy gondolom, több jó megközelítés is volt, melyek az általam használt platform miatt véreztek el.
    A delphi6-ot windows7 alá rakott virtuális gépen XPSP3-on futtattam, melynek az engedélyezett memória használata 512 MB. Az elfogadott megoldás itt memória betelése miatt kiakad, de logikailag helyes és a local SQL korlátait sem lépi át.
    Ehhez kapcsolódik, hogy a local SQL helpjét áttanulmányozva kiderült, hogy alselect-eket lehet ugyan használni, de a WHERE és HAVING használata korlátozott. Ezeket a GROUP BY és az ORDER BY nem tudja kezelni.

    A lekérdezésből kapott dátum adatok problémája még nem oldódott meg, de ez már egy másik topic témája, ha nem tudom megoldani.

    Mindenkinek köszönöm a segítséget, sokat tanultam.

    Üdv: Weisz Imre
    Mutasd a teljes hozzászólást!
  • Kedves Hack!

    A korrektség kedvéért ki kell egészítenem a témazáró hozzászólásom. 
    Az elmúlt 2 napban összesen 3 órát aludtam és már le akartam zárni a témát. Ennek köszönhető, hogy a megoldásod elkerülte a figyelmemet. A pontot már odaítéltem polyJoe-nak (nem érdemtelenül), de mint kiderült a te megoldásod is teljesértékű, ráadásul kevésbé memóriafaló, lefut a már korábban vázolt környezetben is.
    Szívem szerint neked is adnék pontot, de már nem lehet.

    Bocs.
    Mutasd a teljes hozzászólást!
Tetszett amit olvastál? Szeretnél a jövőben is értesülni a hasonló érdekességekről?
abcd