Autor Zpráva
TomášK
Profil
Mám tabulku spolupráce s klienty, ve které je období, kdy jsem s klientem spolupracoval: clients(id, from, to)
Hledám dotaz, který by mi pro zadané roky - např. od 2000 do 2010 - vypsal, s kolika klienty jsem v jednotlivých letech spolupracoval. Pro jeden rok to vypadá takto:
SELECT COUNT(*) FROM clients WHERE from BETWEEN ('2010-01-01', '2010-12-31') OR to BETWEEN ('2010-01-01', '2010-12-31')

Lze to nějak jednoduše rozšířit na více let? Tipuju, že se využije YEAR a GROUP BY, ale nenapadá mě jak.
Taps
Profil
TomášK:
zkus
SELECT COUNT(*) FROM clients group by YEAR(datum) order by datum DESC
TomášK
Profil
To se nechová dobře, pokud s klientem spolupracuju několik let - započítá se jen do jednoho roku - buď prvního nebo posledního - podle toho, jestli zadám YEAR(from) nebo YEAR(to)
ninja
Profil
TomášK: Jak řešíte situaci, kdy s jedním klientem splupracujete v období 2000-2004 a pak 2008-2010?
TomášK
Profil
ninja:
Dvěma záznamy. Ve snaze o zjednodušení zjednodušil příliš - skutečná struktura je cooperations(client_id, from,to, ...), clients(id, ...).
Kajman_
Profil *
Použítí year bych se zkusil vyhnout, asi bych si nějak vygeneroval ty jednotlivé roky mimo sql a k nim vypočítal limitní dny, něco jako...

select t.rok, count(distinct client_id) pocet
from   (select r.rok,
               date(concate(r.rok, '-01-01')) prvni,
               date(concate(r.rok, '-12-31')) posledni
        from   (select 2008 rok union
                select 2009 rok union
                select 2010 rok) r
        ) t
join   clients c
on     t.prvni <= ifnull(c.to,curdate())
       and t.posledni >= c.from
group  by t.rok
TomášK
Profil
Kajman:
Díky, uvedeno do praxe, funguje výborně.

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: