Certo, il tuo ragionamento è corretto ma prevede di calcolare a priori le intersezioni, una cosa che non mi piace affatto. Vado a perdere tutti i vantaggi dell'uso di sql, inoltre per query eneromemente più complesse la cosa è improponibile.
Come scrivevo prima ho temporaneamente risolto usando:
Ma anche in questo modo la query si complica in maniera esagerata, nel senso che si complica la parte php che la genera e, complicando la query con molte altre condizioni che si intersecano, sarei costretto a creare una combinazione esponenziale di "union". Per ora tutto il progetto è stato fatto in questo modo, che tutto sommato regge. Ma con il complicarsi delle cose e l'aggiunta di nuove condizioni mi rendo conto che sarebbe meglio cambiare le cose. (alcune cose sono proprio impossibili finche vado avanti cosi)codice:select sum(valore), case(1) WHEN (orario>='09.00.00' and orario<'10.30.00') THEN 'fascia1' ELSE NULL END as fascia_oraria from tabella1 where (orario>='09.00.00' and orario<'10.30.00') group by fascia_oraria union select sum(valore), case(1) WHEN (orario>='10.00.00' and orario<'11.00.00') THEN 'fascia2' ELSE NULL END as fascia_oraria from tabella1 where (orario>='10.00.00' and orario<'11.00.00') group by fascia_oraria
Quello che chiedo è: qualcuno saprebbe indicarmi un metodo completamente diverso per eseguire la query che ho chiesto? Un metodo che non sfrutti il "case" e che in qualche modo mi permetta di usare sql per ottenere "2 volte lo stesso risultato" tramite group by.
Grazie
EDIT: in questo ultimo esempio si può togliere il "case" dato che c'è una sola condizione sempre vera, ovviamente non cambia niente...


Rispondi quotando