2011-06-13 8 views
1

J'ai une table qui ressemble à quelque chose comme ceci:Calculer le temps écoulé entre les enregistrements

pageload 
--pageloadid (autoincrementing numeric id field) 
--BeginDateTime 

Maintenant, je voudrais montrer tous les enregistrements et indique le temps écoulé entre chaque enregistrement. Je peux ajouter un autre champ à ma table pour stocker un EndDateTime si nécessaire mais je suppose qu'il y a un moyen simple de le faire en SQL auquel je ne pense pas.

J'utilise actuellement MS Access mais la solution que vous proposez devrait être agnostique si possible dans la base de données.

Répondre

2

Ce n'est pas possible de créer requête de base de données agnostique dans ce cas:

Cependant cette requête fonctionnera dans les deux MS Access et MS SQL Server:

select p1.pageloadid, datediff("s", p1.BeginDateTime, p2.BeginDateTime) 
from pageload p1, pageload p2 
where 
    p1.pageloadid < p2.pageloadid and 
    not exists(select * from pageload p3 where p3.pageloadid > p1.pageloadid and p3.pageloadid < p2.pageloadid)  

La requête affiche le temps diff en secondes entre deux rangées adjacentes (si commandé par pageloadid).

Je vous suggère d'ajouter EndDateTime car cela va simplifier et accélérer la requête de manière significative.

0

Il n'existe pas de façon agnostique de base de données pour ce faire, si vous parlez sans accès, le temps & les fonctions de date varient d'un fournisseur à l'autre. Cependant, Access prend en charge datediff et l'implémentation MS prend un intervalle comme premier paramètre. Voir http://www.techonthenet.com/access/functions/date/datediff.php

Questions connexes