[Db] subquery e date

Domenico L. domenico.lorusso a pleiade.it
Mer 30 Maggio 2007 14:27:04 CEST


Marcello Vezzelli ha scritto:
>
> Penso di esserci arrivato:
>
> select SUM(IF(c1.stato=1,1,0)) as assegnati,
> SUM(IF(c2.stato=2,1,0)) as chiusi,
> SUM(IF(c2.stato=2 AND date(c1.data)=date(c2.data_chiuso),1,0)) as 
> asschiusi
> from
> codici as c1
> left join
> codici as c2
> on (c1.id=c2.id)
> where c1.stato=1 or c2.stato=2
> group by date(c1.data)
la where così è inutile devi usare la and

le if sono più complesse del necessario

> La media mi sa che va calcolata con una query separata, perché è 
> diverso il raggruppamento.
>
> select date(data_chiuso),floor(AVG(data_chiuso-data)) from codici
> where stato=2
> group by date(data_chiuso)
ma scusa tu hai nellos tesso record data di attivazione e di chiusura? 
se è così ottenere quelleo che volevi è banale


select date(c1.date), sum(if(stato=1,1,0)) "attualmente 
aperti",sum(if(c1.stato=2,1,0)) "chiusi",
sum(if(date(c1.datechiusura)-date(c1.date) =0,1,0)) "risolti in giornata" ,
sum(date(c1.datechiusura)-date(c1.date))  "media"
from codice c1
where
       c1.stato>0
group by date(c1.date)


Io avevo supposto una struttura così:

idCodice
data
stato

quindi ogni cambio di stato provoca un inserimento nella tabella


> Al di là della query pronta copia incolla che non mi interessa, 
> spiegami come procedi mentalmente. 

Ok direttamente dal corso sql per newbe

DImenticare sql
ragionare per algebra e per operatori

Prima si guarda cosa prendere (from)
poi su cosa selezionare il where
quindi quale sott'insieme delle sorgenti avrò
quindi la on (la clausola di join)


Nell'esempio di cui sopra, supponendo la strutura sopracitata
facevo questo:
Prima prendo tutte le operazioni (c1.stato>0)

Poi prendo tutte le chiusure (c2.stato=2)

quindi c1 sono tutte le operazioni e c2 sutte le chiusure

poi le metto in join le aperture (c1.stato=1) con le rispettive chiusure 
(c1.id=c2.id)

proietto
1 per ogni apertura
1 per ogni chiusura
facendo la differnze delle 2 date ottengo la media e
se le 2 date coincidono sono state risolte in giornata quindi metto 1




ciao


-- 
Domenico L.        	 icq: 645 44 861 - msn: strahd a jumpy.it

per stupire mezz'ora basta un libro di storia,
io cercai di imparare la Treccani a memoria... [F.d.A.]



Maggiori informazioni sulla lista Db