2017-04-26 3 views
0

J'utilise une base de données d'accès Microsoft à partir d'un programme de présence. Je veux faire mon propre site Web de présence, mais j'ai des problèmes pour créer la requête sql.Requête SQL pour calculer la différence entre deux lignes (checkin/checkout)

i ont une table avec les colonnes ci-dessous:

USERID | CHECKTIME | CHECKTYPE 

où userid est un nombre, checktime est date/heure et CheckType détermine si le CHECKIN utilisateur (I) ou Google Checkout (O).

données Exemple:

5 | 26/01/2017 14:20:00 | I 
5 | 26/01/2017 20:10:00 | O 
6 | 26/01/2017 08:05:00 | I 
6 | 26/01/2017 17:31:00 | O 

Comment puis-je montrer à l'utilisateur, la date, et la différence de temps entre les 2 lignes? (checkin et checkout)?

merci d'avance, Philip.

Répondre

0

Je pense que vous avez à faire les étapes suivantes:

  • Diviser le tableau en deux petites tables en fonction de la valeur E/S.
  • Joignez la table deux sur le champ userid.
  • Sélectionnez la différence par rapport au résultat de la jointure.

Voici un exemple (la table principale est nommé user_table):

SELECT userid, B.CHECKTIME - A.CHECKTIME FROM 
    (SELECT * FROM user_table WHERE CHECKTYPE = 'I') as A 
    NATURAL JOIN 
    (SELECT * FROM user_table WHERE CHECKTYPE = 'O') as B 
    USING(userid) 

J'espère que vous avez compris le mécanisme de base.

+0

je votre requête, mais j'ajouté « où b.userid = a.userid » au lieu d'utiliser (ou) puisque vous ne disposez pas d'un joindre à l'extérieur de la de la clause. Mais je n'obtiens aucun résultat de la requête – Phil

0

Vous pouvez essayer ceci:

select a.userid, a.checktime - b.checktime 
    from yourtable a 
    join yourtable b on a.userid = b.userid 
where a.checktype = 'I' 
    and b.checktype = 'O' 
+0

il renvoie moins de résultats. par exemple: 5 | -3700 etc – Phil