[ MarkoBalkan @ 05.10.2010. 18:55 ] @
jeli ovo moguće u firebirdu?
[ abitbp6 @ 05.10.2010. 21:02 ] @
Ne verujem da može upitom. I meni je to trebalo, rešio sam preko SP. Nešto sporije, ali radi.
[ MarkoBalkan @ 05.10.2010. 21:18 ] @
jel možeš staviti tu rješenje?

prepostavljam da ide s cursorom.
[ abitbp6 @ 05.10.2010. 23:16 ] @
Velika je procedura, ne mogu da je pošaljem celu. Osnova je ovo:
Code:

create procedure PROC()
returns (
    RX INTEGER,
    RY INTEGER,
    RZ INTEGER)
as
    declare variable LX INTEGER;
    declare variable LY INTEGER;
    declare variable LZ INTEGER;

    declare variable LCOUNTER INTEGER;
BEGIN

    // neke pocetne vrednosti
    LX = -1;
    LY = -1;
    LZ = -1;

    LCOUNTER = 0;

    FOR SELECT X, Y, Z
        FROM TABLE
        ORDER BY 1, 2, 3
        INTO :RX, :RY, :RZ
    DO
    BEGIN
        // ovako detektujem promenu grupe
        IF ((RX <> LX) OR (RY <> LY)) THEN
        BEGIN
            LCOUNTER = 0;
        END

        // uzimam po 5 iz svake grupe
        IF (LCOUNTER < 5) THEN
        BEGIN
            LCOUNTER = LCOUNTER + 1;
            SUSPEND;
        END

        // Ovo je potrebno za detekciju promene grupe
        LX = :RX;
        LY = :RY;
    END
END
[ franjo_tahi @ 06.10.2010. 10:01 ] @
Ako misliš first, može:

select first 10 tablica.field from tablica
[ MarkoBalkan @ 06.10.2010. 15:06 ] @
Citat:
franjo_tahi: Ako misliš first, može:

select first 10 tablica.field from tablica


sorry, ali ne radi se o ovome.

nego o query-u koji vraća top x iz svake grupe.

recimo:

imamo tablice: sport, natjecatelj, rezultati(ovo je vezna).

potrebno je prikazati podatke za topp 4 najbolja atletičara za svaki sport.

našao sam i jedan drugi način.

ovo je samo primjer

SELECT id,A
FROM new_table
WHERE (
SELECT COUNT(*) FROM new_table f
WHERE f.id = NEW_TABLE.id AND f.a<new_table.a
) <= 1;

kad se stavi 0, vraća top 1 iz svake grupe, kad se stavi jedan vraća top 2 itd...
[ schild @ 06.10.2010. 15:38 ] @
Mozda ovako nesto:

WITH PRIPREMA AS (
SELECT N.ID, S.ID, SUM(RESULTATI) RESULT
FROM NATJECATELJI N
INNER JOIN REZULTATI R ON (...)
INNER JOIN SPORT S ON (...)
GROUP BY 1,2
)
SELECT FIRST 4 N.*
FROM PRIPREMA P
INNER JOIN NATJECACELJI N ON (...)
WHERE ...
ORDER BY P.RESULT DESC

Za detalje pogledajte README.common_table_expressions.txt u doc folderu od FB 2.5

[ MarkoBalkan @ 06.10.2010. 16:26 ] @
ovaj query što sam stavio radi ok.