Comment combiner deux lignes et calculer la différence de temps entre deux valeurs d'horodatage dans MySQL?

J'ai une situation qui, je suis sûr que c'est assez commun et il est vraiment à me tracasser que je ne peux pas comprendre comment le faire ou quoi chercher pour trouver un exemple pertinent/solution. Je suis relativement nouveau à MySQL (qui ont été à l'aide de MYSQL et PostgreSQL) et chaque approche, je pense, bloqué par certaines caractéristiques défaut dans MySQL.

J'ai une "du journal" le tableau qui énumère simplement beaucoup de différents événements avec leur date et heure (stockés en tant que type datetime). Il y a beaucoup de données et les colonnes du tableau ne sont pas pertinentes à ce problème, donc disons que nous avons un simple tableau comme ceci:

CREATE TABLE log (  
  id INT NOT NULL AUTO_INCREMENT,  
  name VARCHAR(16),  
  ts DATETIME NOT NULL,  
  eventtype VARCHAR(25),  
  PRIMARY KEY  (id)  
)

Disons que certaines lignes ont un eventtype = "start" et d'autres ont un eventtype = 'stop'. Ce que je veux faire, c'est en quelque sorte à chaque couple "startrow" à chaque "stoprow" et de trouver la différence de temps entre les deux (et puis additionner les durées pour chaque nom, mais ce n'est pas où se trouve le problème). Chaque "démarrer" de l'événement doit correspondre un "stop" de l'événement se produisant à un moment plus tard, alors que le "début" de l'événement, mais à cause de problèmes/bugs/s'est écrasé avec le collecteur de données, il est possible que certains sont manquants. Dans ce cas, je voudrais d'ignorer l'événement sans un "partenaire". Cela signifie que les données:

foo, 2010-06-10 19:45, start  
foo, 2010-06-10 19:47, start  
foo, 2010-06-10 20:13, stop

..Je voudrais juste ignorer le 19:45 de début de l'événement et de ne pas simplement obtenir deux lignes de résultats à la fois à l'aide de l'20:13 arrêt événement comme le temps à l'arrêt.

J'ai essayé de joindre la table avec elle-même de différentes manières, mais la clé de problèmes pour moi semble être de trouver un moyen d'identifier correctement le correspondant "stop" événement "start" de l'événement pour le "nom". Le problème est exactement le même que vous auriez si vous aviez de la table avec les employés d'estampage et de travail et je voulais savoir combien ils étaient réellement au travail. Je suis sûre qu'il doit être bien connue des solutions, mais je n'arrive pas à les trouver...

source d'informationauteur Nadar