Torna indietro   Hardware Upgrade Forum > Software > Programmazione

FRITZ!Repeater 1700 estende la rete super-veloce Wi-Fi 7
FRITZ!Repeater 1700 estende la rete super-veloce Wi-Fi 7
FRITZ!Repeater 1700 porta il Wi-Fi 7 dual-band nelle case connesse. Mette a disposizione fino a 2.880 Mbit/s su 5 GHz e 688 Mbit/s su 2,4 GHz, integrazione Mesh immediata via WPS con FRITZ!Box e funzioni smart come MLO per bassa latenza. Compatto, plug-and-play e pronto per il futuro, è la soluzione ideale per chi vuole coprire ogni angolo senza cavi o complicazioni
Fondazione Chips-IT, l'Italia alla riscossa nei chip. Il piano e la partnership EssilorLuxottica
Fondazione Chips-IT, l'Italia alla riscossa nei chip. Il piano e la partnership EssilorLuxottica
La Fondazione Chips-IT ha presentato a Pavia il piano strategico 2026-2028 per rafforzare l'ecosistema italiano dei semiconduttori. Con un focus su ricerca, design, talenti e infrastrutture, la Fondazione punta a consolidare il ruolo dell'Italia nel Chips Act europeo, sostenendo innovazione, collaborazione industriale e sovranità tecnologica.
Nutanix: innovazione, semplicità e IA al centro della strategia hybrid multicloud
Nutanix: innovazione, semplicità e IA al centro della strategia hybrid multicloud
Al Museo Alfa Romeo di Arese, Nutanix ha riunito clienti, partner ed esperti per .Next On Tour Italia e per mostrare come l’infrastruttura hybrid multicloud possa diventare il fondamento dell’innovazione, con una piattaforma capace di unificare applicazioni tradizionali, moderne architetture cloud-native e nuovi scenari basati sull’intelligenza artificiale
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 03-06-2009, 11:06   #1
RaouL_BennetH
Senior Member
 
L'Avatar di RaouL_BennetH
 
Iscritto dal: Sep 2004
Messaggi: 3967
[SQL]Ottenere intervalli mensili

Ciao a tutti

Scusate per il titolo poco chiaro ma stamattina mi sento leggermente rincitrullito...

allora, ho questa query:

Codice:
SELECT
(a.Importo / a.Durata) as importoMese,
b.RagioneSociale, b.targa
FROM assicurazioni a
JOIN
VeicoliNoleggiati B
ON
a.id_Veicolo = b.id_Veicolo
Questa query funziona bene, nel senso che mi restituisce i dati che mi aspetto.

Considerando che la tabella assicurazioni ha anche due campi di tipo 'Date', che sono:

startData
endData

e che si riferiscono al periodo di copertura dell'assicurazione, vorrei capire se
fosse possibile adeguare la query di sopra in modo che l'espressione:

importo / durata

mi venga riportata per mese, per esempio:

Codice:
GENNAIO-----FEBBRAIO
190,00______190,00

etc...
grazie mille

RaouL.
__________________
Dai wafer di silicio nasce: LoHacker... il primo biscotto Geek
RaouL_BennetH è offline   Rispondi citando il messaggio o parte di esso
Old 03-06-2009, 16:59   #2
RaouL_BennetH
Senior Member
 
L'Avatar di RaouL_BennetH
 
Iscritto dal: Sep 2004
Messaggi: 3967
mmm... se anche la trovassi non andrebbe bene..

Il mio problema è quindi più complicato

Avendo questa situazione:

Azienda->AssicuraVeicolo->Data = 03/06/2009
Durata polizza mesi = 12
importo = 1.000,00

Azienda->NoleggiaVeicolo->Data = 22/07/2009
supponendo che il termine del noleggio coincida con la data di scadenza dell'assicurazione:
importo per l'assicurazione = (importo / totaleGiorniNoleggio)
-> 1000 / 316 = 3,16

Fin qui.. tutto ok (diciamo)

ora, come faccio tramite sql a fare in modo che la somma di questi giorni mi venga imputata al mese di riferimento?

Cioè, considerando la data di inizio noleggio dell'esempio, dal 22/07 al 31/07 sono 9 giorni, quindi in 'LUGLIO' dovrei ottenere 3,16 * 9 = 28,44

e alla scadenza dovrei ottenere: 'GENNAIO' (2010) 3,16 * 3 = 9,48

__________________
Dai wafer di silicio nasce: LoHacker... il primo biscotto Geek
RaouL_BennetH è offline   Rispondi citando il messaggio o parte di esso
Old 03-06-2009, 18:59   #3
RaouL_BennetH
Senior Member
 
L'Avatar di RaouL_BennetH
 
Iscritto dal: Sep 2004
Messaggi: 3967
sono giunto a questo:

Codice:
select a.targa,
sum(case month (a.inizioNoleggio) when '1' then (b.importo / datediff(last_day(a.inizioNoleggio), a.inizioNoleggio))  else 0 end )as 'GENNAIO',
sum(case month (a.inizioNoleggio) when '2' then (b.importo / datediff(last_day(a.inizioNoleggio), a.inizioNoleggio))  else 0 end )as 'FEBBRAIO',
sum(case month (a.inizioNoleggio) when '3' then (b.importo / datediff(last_day(a.inizioNoleggio), a.inizioNoleggio))  else 0 end )as 'MARZO',
sum(case month (a.inizioNoleggio) when '4' then (b.importo / datediff(last_day(a.inizioNoleggio), a.inizioNoleggio))  else 0 end )as 'APRILE'
from veicolinoleggiati a
join assicurazione b on a.id = b.id_veicolo
where a.inizioNoleggio between b.startData and b.endData
group by a.targa
Ma ho aperti tanti di quei tab con ste query che non mi ci raccapezzo più
__________________
Dai wafer di silicio nasce: LoHacker... il primo biscotto Geek
RaouL_BennetH è offline   Rispondi citando il messaggio o parte di esso
Old 04-06-2009, 12:55   #4
RaouL_BennetH
Senior Member
 
L'Avatar di RaouL_BennetH
 
Iscritto dal: Sep 2004
Messaggi: 3967
uppettino....
__________________
Dai wafer di silicio nasce: LoHacker... il primo biscotto Geek
RaouL_BennetH è offline   Rispondi citando il messaggio o parte di esso
Old 19-06-2009, 12:11   #5
RaouL_BennetH
Senior Member
 
L'Avatar di RaouL_BennetH
 
Iscritto dal: Sep 2004
Messaggi: 3967
sono ancora in alto mare ma qualche progresso l'ho fatto.

Considerando due tabelle:

Manutenzioni, Assicurazioni

la tabella manutenzioni:

Codice:
id_veicolo
tipoManutenzione
dataManutenzione
importo
descrizione

//ottengo il risultato desiderato in questo modo:

SELECT targa,
SUM(IF(MONTH(dataManutenzione) = 1), importo, 0)) As 'GENNAIO',
SUM(IF(MONTH(dataManutenzione) = 2), importo, 0)) As 'FEBBRAIO',
//fino a dicembre
SUM(importo) as 'TOTALE'

FROM manutenzioni 
JOIN
autoveicoli 
ON manutenzioni.id_veicolo = autoveicoli.id
GROUP BY targa
mi da la visualizzazione che desidero.

Per la tabella assicurazioni invece ho un bel problema:

Codice:
id_veicolo
startData
endData
durata
importo
se faccio la stessa query, giustamente ottengo l'importo soltanto in un mese.

E' come se dovessi ciclare all'interno della query ma non ho idea di come fare.

Plz....

grazie mille.

RaouL.
__________________
Dai wafer di silicio nasce: LoHacker... il primo biscotto Geek
RaouL_BennetH è offline   Rispondi citando il messaggio o parte di esso
Old 21-06-2009, 21:19   #6
RaouL_BennetH
Senior Member
 
L'Avatar di RaouL_BennetH
 
Iscritto dal: Sep 2004
Messaggi: 3967
__________________
Dai wafer di silicio nasce: LoHacker... il primo biscotto Geek
RaouL_BennetH è offline   Rispondi citando il messaggio o parte di esso
Old 22-06-2009, 00:23   #7
gugoXX
Senior Member
 
L'Avatar di gugoXX
 
Iscritto dal: May 2004
Città: Londra (Torino)
Messaggi: 3692
Costruisciti la classica dimensione temporale
Ovvero una tabella con PK pari alla data, e con varie colonne relative agli attributi della dimensione temporale.
Che deve essere prepopolata.

ES:
PK_Data Data (oppure varchar con descrittivo YYYY-MM-DD)
DescGiorno varchar(10)
DescMese varchar(6)
DescMeseLungo varchar(20)
DescAnno varchar(4)
DescSettimana varchar(6)

'2009-06-21', '2009-06-21', '2009-06','2009 Giugno', '2009', '2009-28'
(il 28 della 28esima settimana e' sparato a caso, occorre costruire bene e popolare)
Fatta bene una volta, fatta per sempre (o quasi)

Dopodiche', se durata vale esattamente il numero di giorni tra startData ed EndData, farai una cosa simile a
Codice:
SELECT targa, DescMese, Sum(Importo/durata) ValPerMese
FROM  manutenzioni 
JOIN autoveicoli ON manutenzioni.id_veicolo = autoveicoli.id
JOIN DimTempo ON PK_Data BETWEEN startData AND EndData
GROUP BY targa, DescMese
E otterrai un record per ciascuna targa-mese, con l'importo mediato sui giorni del mese di riferiemento.
__________________
Se pensi che il tuo codice sia troppo complesso da capire senza commenti, e' segno che molto probabilmente il tuo codice e' semplicemente mal scritto.
E se pensi di avere bisogno di un nuovo commento, significa che ti manca almeno un test.

Ultima modifica di gugoXX : 22-06-2009 alle 00:25.
gugoXX è offline   Rispondi citando il messaggio o parte di esso
Old 22-06-2009, 00:38   #8
RaouL_BennetH
Senior Member
 
L'Avatar di RaouL_BennetH
 
Iscritto dal: Sep 2004
Messaggi: 3967
Ciao gugoXX e grazie per aver risposto

Il problema sulla tabella delle manutenzioni l'ho risolto con la query:

Codice:
SELECT targa,
SUM(IF(MONTH(dataManutenzione) = 1), importo, 0)) As 'GENNAIO',
SUM(IF(MONTH(dataManutenzione) = 2), importo, 0)) As 'FEBBRAIO',
//fino a dicembre
SUM(importo) as 'TOTALE'

FROM manutenzioni 
JOIN
autoveicoli 
ON manutenzioni.id_veicolo = autoveicoli.id
GROUP BY targa
E mi funziona bene perchè per le manutenzioni non ho bisogno di dividere l'importo della manutenzione nei mesi, dato che è un importo o più importi relativi ad un mese solo o a più mesi.

Infatti la visualizzazione che ottengo è questa:

[img=http://img221.imageshack.us/img221/1329/immaginexfn.th.jpg]

Il problema lo ho per le assicurazioni, perchè devo dividere l'importo per la durata della polizza e visualizzarlo così come lo visualizzo per le manutenzioni.

grazie mille

RaouL.
__________________
Dai wafer di silicio nasce: LoHacker... il primo biscotto Geek
RaouL_BennetH è offline   Rispondi citando il messaggio o parte di esso
Old 22-06-2009, 00:41   #9
gugoXX
Senior Member
 
L'Avatar di gugoXX
 
Iscritto dal: May 2004
Città: Londra (Torino)
Messaggi: 3692
Quote:
Originariamente inviato da RaouL_BennetH Guarda i messaggi
Ciao gugoXX e grazie per aver risposto

Il problema sulla tabella delle manutenzioni l'ho risolto con la query:

Codice:
SELECT targa,
SUM(IF(MONTH(dataManutenzione) = 1), importo, 0)) As 'GENNAIO',
SUM(IF(MONTH(dataManutenzione) = 2), importo, 0)) As 'FEBBRAIO',
//fino a dicembre
SUM(importo) as 'TOTALE'

FROM manutenzioni 
JOIN
autoveicoli 
ON manutenzioni.id_veicolo = autoveicoli.id
GROUP BY targa
E mi funziona bene perchè per le manutenzioni non ho bisogno di dividere l'importo della manutenzione nei mesi, dato che è un importo o più importi relativi ad un mese solo o a più mesi.

Infatti la visualizzazione che ottengo è questa:

[img=http://img221.imageshack.us/img221/1329/immaginexfn.th.jpg]

Il problema lo ho per le assicurazioni, perchè devo dividere l'importo per la durata della polizza e visualizzarlo così come lo visualizzo per le manutenzioni.

grazie mille

RaouL.
Sisi, ho scritto manutenzioni, ma voleva essere assicurazioni
__________________
Se pensi che il tuo codice sia troppo complesso da capire senza commenti, e' segno che molto probabilmente il tuo codice e' semplicemente mal scritto.
E se pensi di avere bisogno di un nuovo commento, significa che ti manca almeno un test.
gugoXX è offline   Rispondi citando il messaggio o parte di esso
Old 22-06-2009, 00:44   #10
RaouL_BennetH
Senior Member
 
L'Avatar di RaouL_BennetH
 
Iscritto dal: Sep 2004
Messaggi: 3967
Quote:
Originariamente inviato da gugoXX Guarda i messaggi
Sisi, ho scritto manutenzioni, ma voleva essere assicurazioni
Ok

provo subito !!

grazie.
__________________
Dai wafer di silicio nasce: LoHacker... il primo biscotto Geek
RaouL_BennetH è offline   Rispondi citando il messaggio o parte di esso
Old 22-06-2009, 15:24   #11
RaouL_BennetH
Senior Member
 
L'Avatar di RaouL_BennetH
 
Iscritto dal: Sep 2004
Messaggi: 3967
Ho provato e riprovato quasi tutta la notte

quello che ottengo è:

Codice:
1, 'April', 169.000000
1, 'August', 169.000000
1, 'December', 160.666667
1, 'February', 169.000000
1, 'January', 8.333333
1, 'July', 169.000000
1, 'June', 169.000000
1, 'March', 169.000000
1, 'May', 169.000000
1, 'November', 169.000000
1, 'October', 169.000000
1, 'September', 169.000000
Mi rendo conto di essere un idiota, ma non rieso a visualizzarla come per le altre

PS: il numero si riferisce all'id, dalla query ho omesso la targa
__________________
Dai wafer di silicio nasce: LoHacker... il primo biscotto Geek

Ultima modifica di RaouL_BennetH : 22-06-2009 alle 15:28.
RaouL_BennetH è offline   Rispondi citando il messaggio o parte di esso
Old 22-06-2009, 15:53   #12
gugoXX
Senior Member
 
L'Avatar di gugoXX
 
Iscritto dal: May 2004
Città: Londra (Torino)
Messaggi: 3692
Ma i numeri sono corretti?
__________________
Se pensi che il tuo codice sia troppo complesso da capire senza commenti, e' segno che molto probabilmente il tuo codice e' semplicemente mal scritto.
E se pensi di avere bisogno di un nuovo commento, significa che ti manca almeno un test.
gugoXX è offline   Rispondi citando il messaggio o parte di esso
Old 22-06-2009, 15:57   #13
RaouL_BennetH
Senior Member
 
L'Avatar di RaouL_BennetH
 
Iscritto dal: Sep 2004
Messaggi: 3967
Quote:
Originariamente inviato da gugoXX Guarda i messaggi
Ma i numeri sono corretti?
Si, sono corretti. Questo veicolo come altri, ha due polizze distinte. La divisione dell'importo totale nei mesi è corretta.
__________________
Dai wafer di silicio nasce: LoHacker... il primo biscotto Geek
RaouL_BennetH è offline   Rispondi citando il messaggio o parte di esso
Old 22-06-2009, 16:10   #14
gugoXX
Senior Member
 
L'Avatar di gugoXX
 
Iscritto dal: May 2004
Città: Londra (Torino)
Messaggi: 3692
Bene.
Allora devi solo fare la trasposta.

Codice:
SELECT id_veicolo,SUM(CASE WHEN Mese=1 THEN valore ELSE 0 END) Gennaio,
                        ,SUM(CASE WHEN Mese=2 THEN valore  ELSE 0 END) Febbraio,
                        ...
                        ,SUM(CASE WHEN Mese=12 THEN valore  ELSE 0 END) Dicembre
FROM (La query di prima)
GROUP BY id_veicolo
Inutile dire che stai evidentemente piegando l'SQL per avere in output un report.
L'SQL dovrebbe essere usato per estrarre i dati, che dovrebbero essere nel formato che avevi prima, senza le trasposizioni (che peraltro hai gia' fatto anche tu nella prima parte della soluzione)
Il tool per la reportistica dovrebbe essere in grado di fare queste operazioni da solo, dati in ingresso i dati puri, mediante funzionalita' di pivoting o altro.
Questo "piegare l'SQL" ti costera' in seguito tanti mal di testa.
__________________
Se pensi che il tuo codice sia troppo complesso da capire senza commenti, e' segno che molto probabilmente il tuo codice e' semplicemente mal scritto.
E se pensi di avere bisogno di un nuovo commento, significa che ti manca almeno un test.
gugoXX è offline   Rispondi citando il messaggio o parte di esso
Old 22-06-2009, 16:24   #15
RaouL_BennetH
Senior Member
 
L'Avatar di RaouL_BennetH
 
Iscritto dal: Sep 2004
Messaggi: 3967
Quote:
Originariamente inviato da gugoXX Guarda i messaggi
Bene.
Allora devi solo fare la trasposta.

Codice:
SELECT id_veicolo,SUM(CASE WHEN Mese=1 THEN valore ELSE 0 END) Gennaio,
                        ,SUM(CASE WHEN Mese=2 THEN valore  ELSE 0 END) Febbraio,
                        ...
                        ,SUM(CASE WHEN Mese=12 THEN valore  ELSE 0 END) Dicembre
FROM (La query di prima)
GROUP BY id_veicolo
Inutile dire che stai evidentemente piegando l'SQL per avere in output un report.
L'SQL dovrebbe essere usato per estrarre i dati, che dovrebbero essere nel formato che avevi prima, senza le trasposizioni (che peraltro hai gia' fatto anche tu nella prima parte della soluzione)
Il tool per la reportistica dovrebbe essere in grado di fare queste operazioni da solo, dati in ingresso i dati puri, mediante funzionalita' di pivoting o altro.
Questo "piegare l'SQL" ti costera' in seguito tanti mal di testa.
Noooo!! manco a farlo apposta l'avevo appena trovata :

Codice:
select targa,
sum(case month(date_hour) when '1' then (importo / durata)  else 0 end )as 'GENNAIO',
sum(case month(date_hour) when '2' then (importo / durata)  else 0 end )as 'FEBBRAIO',
sum(case month(date_hour) when '3' then (importo / durata)  else 0 end )as 'MARZO',
sum(case month(date_hour) when '4' then (importo / durata)  else 0 end )as 'APRILE',
sum(case month(date_hour) when '5' then (importo / durata)  else 0 end )as 'MAGGIO',
sum(case month(date_hour) when '6' then (importo / durata)  else 0 end )as 'GIUGNO',
sum(case month(date_hour) when '7' then (importo / durata)  else 0 end )as 'LUGLIO',
sum(case month(date_hour) when '8' then (importo / durata)  else 0 end )as 'AGOSTO',
sum(case month(date_hour) when '9' then (importo / durata)  else 0 end )as 'SETTEMBRE',
sum(case month(date_hour) when '10' then (importo / durata)  else 0 end )as 'OTTOBRE',
sum(case month(date_hour) when '11' then (importo / durata)  else 0 end )as 'NOVEMBRE',
sum(case month(date_hour) when '12' then (importo / durata)  else 0 end )as 'DICEMBRE',
sum(distinct(importo)) as TOTALE
from assicurazione
join autoveicolo on assicurazione.id_veicolo = autoveicolo.id
join calendar on date_hour between startData and endData
group by targa

Per quanto riguarda il discorso 'report' :

E' proprio quello che devo fare. Queste 'viste' saranno lanciate direttamente dal query browser per poi essere esportate o su csv o altri formati o per essere stampate direttamente.

Aggiungo: nella realtà aziendale in cui mi trovo stai sicuro che se devono trovare quattrini per fare il leasing di una bmw ci riescono.. ma se si tratta di comprare strumenti software o
pagare un professionista .... lasciamo perdere va.. io mi devo arrangiare come posso

gugoXX ancora una volta non so come ringraziarti

...sta diventando imbarazzante
__________________
Dai wafer di silicio nasce: LoHacker... il primo biscotto Geek
RaouL_BennetH è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


FRITZ!Repeater 1700 estende la rete super-veloce Wi-Fi 7 FRITZ!Repeater 1700 estende la rete super-veloce...
Fondazione Chips-IT, l'Italia alla riscossa nei chip. Il piano e la partnership EssilorLuxottica Fondazione Chips-IT, l'Italia alla riscossa nei ...
Nutanix: innovazione, semplicità e IA al centro della strategia hybrid multicloud Nutanix: innovazione, semplicità e IA al ...
Lenovo LOQ 15i Gen 10 (15IRX10) alla prova: il notebook gaming 'budget' che non ti aspetti Lenovo LOQ 15i Gen 10 (15IRX10) alla prova: il n...
Due mesi di Battlefield 6: dalla campagna al battle royale, è l'FPS che stavamo aspettando Due mesi di Battlefield 6: dalla campagna al bat...
AMD potrebbe affiancare Samsung a TSMC n...
Addio ai controlli delle caldaie in casa...
La NASA sta anticipando le missioni di r...
SpaceX redarguisce la Cina per un rischi...
Il 2026 sarà l'anno degli smartph...
Ayaneo svela Pocket Play: è uno s...
Apple sotto indagine in Svizzera: &egrav...
Anthropic, Kaplan avverte: entro il 2030...
La versione Global dello Xiaomi Pad 8 Pr...
Aumento di prezzo in arrivo per la Ninte...
Samsung Galaxy S26 Ultra, nuove conferme...
Robot aspirapolvere ancora ai prezzi del...
Un sacco di dispositivi Ring scontati su...
Hisense HS3100 a meno di 100€ su Amazon:...
Tomb Raider Catalyst è il sequel ...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 06:54.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Served by www3v