Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

select top x iz svake grupe

[es] :: Firebird/Interbase :: select top x iz svake grupe

[ Pregleda: 2408 | Odgovora: 7 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

MarkoBalkan

Član broj: 141124
Poruke: 1624
178.160.97.*



+19 Profil

icon select top x iz svake grupe05.10.2010. u 18:55 - pre 164 meseci
jeli ovo moguće u firebirdu?
 
Odgovor na temu

abitbp6

Član broj: 221384
Poruke: 216
*.ptt.rs.



+17 Profil

icon Re: select top x iz svake grupe05.10.2010. u 21:02 - pre 164 meseci
Ne verujem da može upitom. I meni je to trebalo, rešio sam preko SP. Nešto sporije, ali radi.
 
Odgovor na temu

MarkoBalkan

Član broj: 141124
Poruke: 1624
87.252.132.*



+19 Profil

icon Re: select top x iz svake grupe05.10.2010. u 21:18 - pre 164 meseci
jel možeš staviti tu rješenje?

prepostavljam da ide s cursorom.
 
Odgovor na temu

abitbp6

Član broj: 221384
Poruke: 216
*.ptt.rs.



+17 Profil

icon Re: select top x iz svake grupe05.10.2010. u 23:16 - pre 164 meseci
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
 
Odgovor na temu

franjo_tahi
Franjo Tahi
Zagreb

Član broj: 34712
Poruke: 399
*.adsl.net.t-com.hr.



+1 Profil

icon Re: select top x iz svake grupe06.10.2010. u 10:01 - pre 164 meseci
Ako misliš first, može:

select first 10 tablica.field from tablica
 
Odgovor na temu

MarkoBalkan

Član broj: 141124
Poruke: 1624
178.160.106.*



+19 Profil

icon Re: select top x iz svake grupe06.10.2010. u 15:06 - pre 164 meseci
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...
 
Odgovor na temu

schild
Dejan Šild
TopCode Software
Subotica

Član broj: 59888
Poruke: 138
*.sksyu.net.

Sajt: www.topcode.rs


+2 Profil

icon Re: select top x iz svake grupe06.10.2010. u 15:38 - pre 164 meseci
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

 
Odgovor na temu

MarkoBalkan

Član broj: 141124
Poruke: 1624
93.159.85.*



+19 Profil

icon Re: select top x iz svake grupe06.10.2010. u 16:26 - pre 164 meseci
ovaj query što sam stavio radi ok.
 
Odgovor na temu

[es] :: Firebird/Interbase :: select top x iz svake grupe

[ Pregleda: 2408 | Odgovora: 7 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.