Firebird lkerédezés segítség

Firebird lkerédezés segítség
2022-02-03T22:34:41+01:00
2022-02-04T07:42:21+01:00
2022-10-15T21:21:27+02:00
csanesz
Sziasztok!

Próbálkoztam több lekérdezéssel, de nem sikerült a végére járnom, ebben kérném a segítségeteket.

Van az alábbi táblám:

+-----+----+---+-----------+---+ |RowId|Name|Num|Date |Typ| +-----+----+---+-----------+---+ |1 |aaa |1 |2022.01.12 |P | |2 |aaa |1 |2022.01.12 |P | |3 |aaa |4 |2022.01.12 |L | |4 |bbb |1 |2022.01.15 |P | |5 |bbb |2 |2022.01.15 |L | +-----+----+---+-----------+---+
Ebből az alábbi listát szeretném megkapni:

+-----+----+---+-----------+---+ |RowId|Name|Num|Date |Typ| +-----+----+---+-----------+---+ |3 |aaa |4 |2022.01.12 |L | |5 |bbb |2 |2022.01.12 |L | +-----+----+---+-----------+---+
Azaz csoportosítanám a NAME mező szerint, majd a NUM mezőből a maximumot kiválasztanám, és ennek a rekordnak kellene a ROWID, NAME, NUM, DATE, TYP mezője. A ROWID csak egy auto increment mező, és a TYP mező is csak megjelenítésre kell, nem befolyásolja a lekérdezést.

Az alábbi SQL nem jó, mert csak az első rekordot adja vissza:

SELECT FIRST 1 DISTINCT TBL.NAME, TBL.NUM, TBL.DATE FROM TBL WHERE TBL.TABLENUM > 0 ORDER BY TBL.TABLENUM DESC;
Ezt átírtam, de ez pedig hibát dob, hogy a GROUP BY-nál megadott mezőknek szerepelni kell a SELECT-ben-

SELECT TBL.NAME, TBL.NUM, TBL.DATE FROM TBL WHERE TBL.TABLENUM > 0 ORDER BY TBL.TABLENUM DESC GROUP BY TBL.NAME;
Error: Invalid expression in the select list (not contained in either an aggregate function or the GROUP BY clause). SQL
Error (code = -104):
Invalid token.

Firebird verzió: 2.5
Mutasd a teljes hozzászólást!
SELECT TBL.NAME, MAX(TBL.NUM) NUM, TBL.DATE, TBL.TYP FROM TBL WHERE TBL.TABLENUM > 0 ORDER BY TBL.TABLENUM DESC GROUP BY TBL.NAME, TBL.DATE, TBL.TYP;
Persze, ha a dátum és a típus változhat, akkor azt is aggregálni kell valamilyen szempont alapján.
Mutasd a teljes hozzászólást!

  • Bocsi, de elírtam a két SQL-t amivel próbálkoztam, alább a helyes SQL

    Az első:

    SELECT FIRST 1 DISTINCT TBL.NAME, TBL.NUM, TBL.DATE FROM TBL WHERE TBL.NUM > 0 ORDER BY TBL.NUM DESC;

    Ez pedig a második:

    SELECT TBL.NAME, TBL.NUM, TBL.DATE FROM TBL WHERE TBL.NUM > 0 ORDER BY TBL.NUM DESC GROUP BY TBL.NAME;
    Mutasd a teljes hozzászólást!
  • Szia!

    Köszi, ez most hibát dob a GROUP sorra:

    Token unknown - line 8, column 1. GROUP.
    Valószínűleg azért mert a TABLENUM és NUM mezők ugyan azok, csak amikor beírtam az SQL-t, akkor rosszul írtam be. Válaszoltam a hozzászólásomra, benne a helyes SQL.
    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