Newsgroup: it.comp.appl.access
Titolo: Differenza di data fra record

Salve a tutti,
ho un DB con una tabella chiamata Immissione Orario la quale contiene i 
campi
IdImmissione, Data, Ora, Dipendente
Supponiamo che la tabella venga popolata nel seguente modo:
1    12/05/05    08.30    Rossi
2    12/05/05    08.35    Verdi
3    12/05/05    12.30    Rossi
4    12/05/05    12.45    Verdi
5    12/05/05    15.00    Rossi
6    12/05/05    18.00    Rossi
Vorrei ora creare una query che faccia la differenza fra il primo record di 
rossi e il secondo di rossi, fra il primo di verdi e il secondo di verdi, 
fra il terzo di rossi e il quarto. Mi dovrebbe insomma calcolare la 
differenza fra l'entrata in servizio e l'uscita... avete un'idea di come 
fare?
Saluti Simone 

 ha scritto nel messaggio
news:czkhe.1382920$35.51...@news4.tin.it...

Ciao SimoneB,
manca un campo per indicare quale è la riga di ingresso *I* e quale è la
riga di uscita *U*
-----------
 IdImmissione, Data, Ora, Dipendente, TipoRiga
 1    12/05/05    08.30    Rossi    I
 2    12/05/05    08.35    Verdi    I
 3    12/05/05    12.30    Rossi    U
 4    12/05/05    12.45    Verdi    U
 5    12/05/05    15.00    Rossi    I
 6    12/05/05    18.00    Rossi    U
-------------
fatto questo puoi applicare la seguente query
----------
SELECT Data,
       Dipendente,
       Ora AS Ingresso,
       (Select Top 1 Ora FROM Immissione I2
        Where I2.Dipendente=I1.Dipendente
          AND I2.Data=I1.Data
          AND I2.Ora> I1.Ora
          AND I2.TipoRiga='U'
        ORDER BY I2.Data+I2.Ora) AS Uscita,
       Cdate(Uscita-Ingresso) AS Differenza
FROM Immissione AS I1
WHERE TipoRiga='I'
--------------
Risultato
--------------
Data, Dipendente, Ingresso, Uscita, Differenza
12/05/2005     Rossi     8.30.00     12.30.00     4.00.00
12/05/2005     Verdi     8.35.00     12.45.00     4.10.00
12/05/2005     Rossi     15.00.00    18.00.00     3.00.00
----------------
sempre che l'ingresso e l'uscita avvengano nello stasso giorno, in altro
caso bisogna fare la differenza tra Data+Ora
Ciao Giorgio


Io ho creato una nuova query in struttura senza specificare nessuna origine 
di tabella... sono andato in SQL e ho messo il codice che te mi hai dato 
modificando il campo TipoRiga in Tipo e al posto di U per uscita ho messo 
"o" modificando anche nel codice  AND I2.TipoRiga='U' in AND I2.TipoRiga='o' 
dopo aver eseguito la query mi reperisce solo gli ingressi e non le uscite 
di conseguenza la differenza non la esegue... inoltre mi modifica il codice 
in questo modo è giusto?
SELECT I1.Data, I1.Dipendente, I1.Ora AS Ingresso, (Select Top 1 Ora FROM 
Immissione I2
        Where I2.Dipendente=I1.Dipendente
          AND I2.Data=I1.Data
          AND I2.Ora> I1.Ora
          AND I2.Tipo='o'
        ORDER BY I2.Data+I2.Ora) AS Uscita, CDate(Uscita-Ingresso) AS 
Differenza
FROM Immissione AS I1
WHERE (((I1.Tipo)='I'));
Grazie ancora e saluti Simone 

 ha scritto nel messaggio
news:czkhe.1382920$35.51...@news4.tin.it...

Vai sul Sito Comune e nella Sezione Queries leggi la FAQ di Giorgio Rancati
e Roberto intitolata "2.28 Come creare una query per normalizzare una
tabella timbrature da badge".
-- 
Roberto
-----------------------------------------------------
il Sito Comune di it.comp.appl.access
http://www.sitocomune.com
----------------------------------------------------

 Roberto
e pensare che avevo anche provato a vedere se c'era qualcosa... ho letto ed 
ho risolto così
SELECT Tx.Dipendente, Tx.Giorno, Tx.OraIngresso, Tx.OraUscita, 
DateDiff("n",OraIngresso,OraUscita) AS Totale
FROM [SELECT Dipendente,
                          CDate(Fix(Data)) AS Giorno,
                          Format(Data,"hh:nn") AS OraIngresso,
                          (SELECT TOP 1  Format(DATA,"hh:nn") AS OraUscita1
                           FROM Immissione AS M2
                           WHERE M2.Tipo = 'o'
                                         AND M2.Dipendente = M1.Dipendente
                                         AND M2.Data > M1.Data
                                         AND CDate(Fix(M2.data)) = 
CDate(Fix(M1.data))
                          ORDER BY M2.data) AS OraUscita
               FROM Immissione AS M1
               WHERE (((M1.Tipo)='i'))
               ORDER BY M1.Data]. AS Tx
ORDER BY Tx.Giorno, Tx.OraIngresso;
Mille grazie... 

>campi IdImmissione, Data, Ora, Dipendente
vai a capire che avevi un solo campo per la data e per l'ora :-)
Giorigo