Autor Zpráva
sqld
Profil *
Potřeboval bych poradit s následujícím výběrem:
společný výběr z 3 tabulek tab1, tab2, tab3 (každá má položky datumS, datumE), z každé tabulky výběr prvních tří položek
kdy datumE nesmí být starší než aktuální datum a setříděno dle datumE od nejaktuálnější a výsledných 9 položek (jsou-li, jinak méně) setříděno nejdříve aby aktuální datum bylo v intervalu datumS a datumE a pak dle datumuE nejaktuálnější.

např.:
tab1.a: 25.12.2012 1.1.2013
tab1.b: 10.2.2013 11.2.2013
tab1.c: 1.9.2012 5.9.2012
tab1.d: 22.3.2013 25.3.2013
tab2.a: 20.12.2010 1.1.2011
tab2.b: 10.2.2013 13.2.2013
tab2.c: 4.9.2013 5.9.1013
tab2.d: 20.1.2013 26.1.2013
tab3.a: 2.2.2010 5.2.2010
tab3.b: 13.1.2013 12.4.2013
tab3.c: 12.10.2013 15.10.2013
tab3.d: 30.10.2013 10.11.2013

vysledek k 11.2.2013:
tab1.b: 10.2.2013 11.2.2013
tab2.b: 10.2.2013 13.2.2013
tab3.b: 13.1.2013 12.4.2013
tab1.d: 22.3.2013 25.3.2013
tab2.c: 4.9.2013 5.9.1013
tab3.c: 12.10.2013 15.10.2013
tab3.d: 30.10.2013 10.11.2013
Tori
Profil
Asi tohle?
(select * from tabulka1
    where datumE <= '2013-02-11'
    order by datumE limit 3
union all
select * from tabulka2 
    where datumE <= '2013-02-11'
    order by datumE limit 3
union all
select * from tabulka2 
    where datumE <= '2013-02-11'
    order by datumE limit 3
) order by (datumS > '2013-02-11'), datumE
Sloupce datumS a datumE jsou typu DATE, ano?
Kajman
Profil
Tori:

Ve where máš asi obráceně podmínku (teda máš to podle zadání, ale myslím, že ho napsal obráceně :) a jednotlivé selecty asi bude potřeba uzávorkovat, aby se třetí limit nebral pro celý výsledek union.

SELECT *
FROM   ((SELECT 'tab1' AS zdroj,
                datumS,
                datumE
         FROM   tab1
         WHERE  datumE >= '2013-02-11'
         ORDER  BY datumE
         LIMIT  3)
        UNION ALL
        (SELECT 'tab2' AS zdroj,
                datumS,
                datumE
         FROM   tab2
         WHERE  datumE >= '2013-02-11'
         ORDER  BY datumE
         LIMIT  3)
        UNION ALL
        (SELECT 'tab3' AS zdroj,
                datumS,
                datumE
         FROM   tab3
         WHERE  datumE >= '2013-02-11'
         ORDER  BY datumE
         LIMIT  3)) x
ORDER  BY '2013-02-11' < datumS,
          datumE  
sqld
Profil *
Díky pánové, zkusím to....tohle bych dohromady nedal..
Sloupce datumS a datumE jsou typu DATETIME.
Místo přesného data (jelikož chci k aktuálnímu datu) tedy dám DATETIME('NOW','localtime')
sqld
Profil *
Ještě jedna důležitá věc, používám SQLite db? Platí to tak i u ní?

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0