Calcul de la différence de temps entre des lignes consécutives
La tâche consiste à déterminer la différence de temps entre des enregistrements consécutifs dans une table contenant une colonne StartDate. Pour y parvenir, nous pouvons utiliser une auto-jointure et comparer chaque enregistrement avec son enregistrement suivant dans le tableau.
Utilisation d'une auto-jointure :
Pour comparer des enregistrements, nous pouvons utiliser une auto-jointure sur la table. Voici un exemple de requête :
SELECT A.requestid, A.starttime, (B.starttime - A.starttime) AS timedifference FROM MyTable A INNER JOIN MyTable B ON B.requestid = (A.requestid + 1) ORDER BY A.requestid ASC;
Cette requête crée une table jointe dans laquelle chaque enregistrement (A) est associé à son enregistrement suivant (B). La différence de temps de colonne calculée donne la différence de temps entre les deux enregistrements.
Gestion des identifiants de requête non consécutifs :
Si les identifiants de requête ne sont pas consécutifs, nous pouvons utiliser un CROSS JOIN et filtrage supplémentaire pour faire correspondre chaque enregistrement avec son successeur immédiat.
SELECT A.requestid, A.starttime, (B.starttime - A.starttime) AS timedifference FROM MyTable A CROSS JOIN MyTable B WHERE B.requestid IN (SELECT MIN(C.requestid) FROM MyTable C WHERE C.requestid > A.requestid) ORDER BY A.requestid ASC;
Cette requête garantit que chaque enregistrement est correspond à son successeur immédiat, même si les identifiants de requête ne sont pas consécutifs.
Exemples de données :
Considérez les exemples de données fournis par l'auteur :
requestId | startdate |
---|---|
1 | 2011-10-16 13:15:56 |
2 | 2011-10-16 13:15:59 |
3 | 2011-10-16 13:15:59 |
4 | 2011-10-16 13:16:02 |
5 | 2011-10-16 13:18:07 |
Sortie :
L'application de la requête ci-dessus aux exemples de données produira le sortie suivante :
requestId | startdate | timedifference |
---|---|---|
1 | 2011-10-16 13:15:56 | NULL |
2 | 2011-10-16 13:15:59 | 00:00:03 |
3 | 2011-10-16 13:15:59 | 00:00:00 |
4 | 2011-10-16 13:16:02 | 00:00:03 |
5 | 2011-10-16 13:18:07 | 00:02:05 |
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!