Newsgroup: it.comp.lang.visual-basic
Titolo: [?] Calcolo di date intersecanti

Il subject fa schifo lo so ...
Il caso reale è questo :
ci sono 2 operatori che lavorano nella stessa linea di produzione (linea 1)
l'operatore A fa dalle 6.00 alle 14.00
l'operatore B fa dalle 12.00 alle 20.00
registro nella mia tabella i dati in questo modo
CodOperatore = "A"
DataInizio = "01/01/2001 6.00"
DataFine = "01/01/2001 14.00"
LineaProduzione = 1
CodOperatore = "B"
DataInizio = "01/01/2001 12.00"
DataFine = "01/01/2001 20.00"
LineaProduzione = 1
....
la domanda è spontanea : quanto tempo ha lavorato la linea 1 ?
dalle 6 alle 14 = 8 ore
dalle 12 alle 20 = 8 ore
totale 16 ore; in realtà però la linea ha lavorato solo 14 ore (dalle 6 alle
20)
Esiste un metodo per farmi restituire il valore 14 in un'unica query ?
Attualmento sono costretto a calcolarmelo via codice (sfrutto i cursori di
T-SQL) ma la cosa non mi piace affatto.
Spero di esser stato chiaro.
Saluti

 ha scritto nel messaggio
news:9vn4pq$b40$1...@fe1.cs.interbusiness.it...


Questo ti puo' andare bene?
Detta Tabella1 una tabella siffatta:
Inizio: 6.00
Fine: 14.00
Operatore: A
Linea: 1
Data: 01/12/01
etc.
Puoi costruire la seguente query:
SELECT 24*(Max([Fine])-Min([Inizio])) AS Espr1, Tabella1.Linea
FROM Tabella1
GROUP BY Tabella1.Linea;
Ciao.
Giovanni


> Certo che non si è capita una mazza! Eheheh!
Hai provato a leggere bene ciò che ho scritto ? sai, io lo faccio sempre
prima di postare.
La mia impressione è che il post sia troppo lungo e che la richiesta sia
troppo articolata perchè risulti interessante.
Fino ad oggi nessuno si è mai lamentato delle mie spiegazioni.
Evidenziami i punti che non hai capito.
Saluti

 GROUP BY Tabella1.Linea;
ti ringrazio per la risposta; in effetti la mia domanda è stata "come farmi
restituire il vaolre 14" e la tua query funziona benissimo per questo.
La mia richiesta reale però sarebbe questa :
come calcolare le ore di funzionamente della linea 1 con una sola query.
Potrebbe succedere questo :
Operatore A dalle 8 alle 10    = 2 ore
Operatore B dalle 12 alle 14  = 2 ore
Totale 4 ore
Con la tua query 14-8 = 6 ore
Grazie comunque.
Saluti

 Con la tua query 14-8 = 6 ore
Quello che ti interessa dovrebbe essere insiemisticamente parlando l'unione
di tutti gli intervalli meno l'intersezione di tutti gli intevalli. Questo
ammettendo che gli operatori siano 2 con 3 le cose forse si complicano...
forse...
Con SQL dovresti prima sommare le ore date da tutti gli intervalli di tempo
(Questo è facile) e poi a questo totale toglierci quelle che rappresentano
l'intersezione dei periodi (e per questo bisogna pensarci un po' su)...
Ci penso un po' su e poi se trovo una soluzione in SQL che non faccia troppo
schifo te la posto...
Ciao
Alessandro

 come calcolare le ore di funzionamente della linea 1 con una sola query.
Non credo che si possa fare con una sola query perche' bisogna considerare
tutti gli intervalli e le intersezioni considerarle singolarmente.
Secondo me ci sono solo due soluzioni praticabili in tempi "decenti":
1) fare una select per linea e lavorare con VB in un ciclo all'interno del
recordset che ottieni
2) fare una stored procedure (se il tuo DBMS te le permette, es. SQL Server
o Sybase)
--
   Alex Palmese
--- Per scrivermi elimina "LOSPAM" dall'indirizzo ---
Sei anche tu stanco dei messaggi spam? Usa Terminator, il programma
anti-spam italiano FREEWARE! 
http://www.sertel.net/terminator/

Ma si dai, stavo scherzando, non si era capito? Il fatto è che non so
nemmeno di cosa stavi parlando (sono molto principiante). Non volevo
offenderti. Ciao.
--
Starla. SP.

 o Sybase)
E' quello che temevo ... ho già realizzato la stored e funziona anche bene
... solo che sono costretto ad utilizzare due cursori che, pur essendo fast
forward, preferirei non usare.
Grazie
    Saluti


Opss...
scusa a te .. non avevo capito l'ironia.
Saluti