Calcolo minuti lavorati

domenica 09 marzo 2014 - 09.20
Tag Elenco Tags  Oracle 11g  |  Oracle 10g  |  Oracle 9g  |  Oracle 8g

franco.geko Profilo | Junior Member

Ciao a tutti,
ho il seguente problema.
In una tabella di oracle ho la data di inizio e fine lavorazione di alcuni tecnici in formato data e ora.
In un'altra tabella ho l'orario di lavoro tecnico per tecnico (es. dalle 7:30 alle 13, dalle 14 alle 16:30).

Dovrei calcolare il tempo di lavorazione delle macchine in relazione all'orario di lavoro.
Ad esempio se un tecnico ha lavorato una certa macchina da lunedì 10/03/2014 alle 8:30 e finita martedì 11/03/2014 alle 16:00, dovrei trovare un'estrazione che dica che ha lavorato dalle 8:30 alle 13, dalle 14 alle 16:30 di lunedì, dalle 7:30 alle 13:00, dalle 14:00 alle 16:00 di martedì per un totale di
14 ore e mezzo (270 minuti).

Come posso farlo in SQL ?

Grazie dell'attenzione
Franco
Assaggiata l'acqua, conosciuta la sorgente

alx_81 Profilo | Guru

>Ciao a tutti,
ciao

>In una tabella di oracle ho la data di inizio e fine lavorazione di alcuni tecnici in formato data e ora.
>In un'altra tabella ho l'orario di lavoro tecnico per tecnico (es. dalle 7:30 alle 13, dalle 14 alle 16:30).
>Dovrei calcolare il tempo di lavorazione delle macchine in relazione all'orario di lavoro.
>Ad esempio se un tecnico ha lavorato una certa macchina da lunedì
>10/03/2014 alle 8:30 e finita martedì 11/03/2014 alle 16:00,
>dovrei trovare un'estrazione che dica che ha lavorato dalle 8:30
>alle 13, dalle 14 alle 16:30 di lunedì, dalle 7:30 alle 13:00,
>dalle 14:00 alle 16:00 di martedì per un totale di
>14 ore e mezzo (270 minuti).
>Come posso farlo in SQL ?
Per aiutarci a rispondere dovresti passarci gli script di CREATE TABLE con qualche dato di prova. In base a questi poi dovresti passarci anche il risultato che vorresti ottenere in forma tabellare.
In generale, credo che l'approccio "stored procedure + PL-SQL" sarebbe una buona via da seguire. Resta il fatto che se hai un'applicazione che chiama il database, potresti pensare a non farlo sul database ma sull'applicazione/servizio, questo perchè molto probabilmente avrai bisogno di LOOP e farli fare ad un RDBMS non è il top, non solo perchè non ragioni a SET ma perchè se un giorno il calcolo deve essere scalato, non puoi più farlo.

>Grazie dell'attenzione
di nulla!
Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

http://blogs.dotnethell.it/suxstellino
http://suxstellino.wordpress.com
http://mvp.microsoft.com/profiles/Alessandro.Alpi

franco.geko Profilo | Junior Member

Ciao Alessandro,
scusa il ritardo....
inserisco il codice per SQL Server, dato che in Oracle non ho i permessi di creare le tabelle e non le ho ancora fatte creare..

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

Da questi dati devo ricavare le ore lavorate in base all'orario di lavoro della tabella Tec_Orari come nella tabella che allego.
Praticamente la prima macchina è stata lavorata in 14 ore, mentre la seconda in 2,5 ore.

Tecnico Macchina Giorno dalle alle Ore lavorate 1213 Prima macchina 13/03/2014 08:00 13:00 5,00 1213 Prima macchina 13/03/2014 14:00 16:30 2,50 1213 Prima macchina 14/03/2014 07:30 13:00 5,50 1213 Prima macchina 14/03/2014 14:00 15:00 1,00 1213 Seconda macchina 14/03/2014 15:30 16:30 1,00 1213 Seconda macchina 17/03/2014 07:30 09:00 1,50

Spero sia più chiaro...

Grazie
Franco
Assaggiata l'acqua, conosciuta la sorgente

alx_81 Profilo | Guru

>Ciao Alessandro,
ciao

>scusa il ritardo....
scusami tu.. il post mi si era perso nei meandri dei preferiti e non ti ho ancora risposto..

>Da questi dati devo ricavare le ore lavorate in base all'orario
>di lavoro della tabella Tec_Orari come nella tabella che allego.
>Praticamente la prima macchina è stata lavorata in 14 ore, mentre
>la seconda in 2,5 ore.
>Spero sia più chiaro...
ora è chiaro. Hai disponibilità solo di usare SQL (o cmq PL-SQL) oppure c'è un'applicazione che chiama il database?
Perchè per rendere un minimo leggibile il codice, ti conviene fare un loop, ma fuori dal database.. Non metterei quelle logiche di business (quelle sugli orari) direttamente su db..

Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

http://blogs.dotnethell.it/suxstellino
http://suxstellino.wordpress.com
http://mvp.microsoft.com/profiles/Alessandro.Alpi
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2025
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5