Comment comparé une ligne avec une ligne précédente en MySQL
Résolu
NotTheFood
-
NotTheFood -
NotTheFood -
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,
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:
- Comment comparé une ligne avec une ligne précédente en MySQL
- Partager photos en ligne - Guide
- Mètre en ligne - Guide
- Aller à la ligne excel - Guide
- Formulaire en ligne de meta - Guide
- Apparaitre hors ligne instagram - Guide
3 réponses
yg_be
Messages postés
23541
Date d'inscription
Statut
Contributeur
Dernière intervention
Ambassadeur
1 584
bonjour, pourquoi cherches-tu l'action précédente?
moi je ferais, pour commencer:
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
yg_be
Messages postés
23541
Date d'inscription
Statut
Contributeur
Dernière intervention
Ambassadeur
1 584
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?
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 :)
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 :)
Merci pour ta réponse mais je ne saisi pas bien ce que représente le résultat de la jointure sur id_user.