Autor | Zpráva | ||
---|---|---|---|
TomášK Profil |
#1 · Zasláno: 28. 2. 2010, 17:03:57
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 |
#2 · Zasláno: 28. 2. 2010, 17:19:03
TomášK:
zkus SELECT COUNT(*) FROM clients group by YEAR(datum) order by datum DESC |
||
TomášK Profil |
#3 · Zasláno: 28. 2. 2010, 17:46:24
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 |
#4 · Zasláno: 28. 2. 2010, 17:56:17
TomášK: Jak řešíte situaci, kdy s jedním klientem splupracujete v období 2000-2004 a pak 2008-2010?
|
||
TomášK Profil |
#5 · Zasláno: 28. 2. 2010, 18:13:27
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 * |
#6 · Zasláno: 28. 2. 2010, 18:58:25
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 |
#7 · Zasláno: 1. 3. 2010, 19:53:38
Kajman:
Díky, uvedeno do praxe, funguje výborně. |
||
Časová prodleva: 14 let
|
0