Comment comparé une ligne avec une ligne précédente en MySQL

Résolu/Fermé
NotTheFood - 19 avril 2019 à 10:27
 NotTheFood - 23 avril 2019 à 14:52
Bonjour à tous,

Ma question concerne une base de donnée de la quelle je doit extraire le nombre d'actions, d'un utilisateur, séparée de plus de 20 secondes.

Je m'explique, j'ai à ma disposition une table contenant la trace des actions réalisées par les utilisateurs (id_trace, id_user, action_time pour simplifier) avec action_time la date et l'heure de l'action.
Je dois donc compter le nombre d'action d'un utilisateur séparée de au moins 20 sec.

Mon avancement n'est pas brillant, j'ai simplement réussi à obtenir une table contenant l'heure d'une action et l'heure d'une action précédente mais qui n'est pas nécessairement une action lié au bon utilisateur.

Ma question est donc la suivante comment puis-je obtenir l'heure de l'action précédente d'un user en particulier ?

En vous remerciant,
A voir également:

3 réponses

yg_be Messages postés 22696 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 17 avril 2024 1 471
19 avril 2019 à 21:21
bonjour, pourquoi cherches-tu l'action précédente?
moi je ferais, pour commencer:
select t1.id_trace, t1.id_user, t1.action_time, t2.id_trace, t2.action_time
from trace as t1, trace as t2
where
t1.id_user = t2.id_user
and t2.action_time - t1.action_time > 20/24/3600
0
Bonjour,

Merci pour ta réponse mais je ne saisi pas bien ce que représente le résultat de la jointure sur id_user.
0
yg_be Messages postés 22696 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 17 avril 2024 1 471
19 avril 2019 à 21:23
bonjour, si un utilisateur fait une action à un moment, une autre 15 secondes plus tard, et une troisième encore 15 secondes plus tard, cela compte pour combien?
0
Théoriquement deux mais c'est effectivement un aspect auquel je n'ai pas réfléchi.
0
Rebonjour,

Voici comment j'ai finalement résolu mon problème :

SET @tranche=1;
CREATE TABLE tmpt (
id INT PRIMARY KEY AUTO_INCREMENT,
id_user INT,
action_time DATETIME
)

INSERT INTO tmpt(id_user, action_time) (
SELECT id_user, action_time
FROM trace
GROUP BY id_user, action_time
);

SELECT id_user, count(distinct tranche) as nb_tranche
FROM (SELECT t1.id_user, @tranche:= IF( t1.id_user = t2.id_user AND t1.action_time < t2.action_time -20, @tranche, @tranche +1) as tranche FROM tmpt t1 JOIN tmpt t2 ON t1.id=t2.id-1) as TMP
GROUP BY id_user;

En vous remerciant pour vos réponses :)
0