Question

Cette question est différente de un Question communément posée sur la commande des résultats finaux par la clause en.

Je voudrais forcer les résultats renvoyés par la requête qui contient la clause in, pour correspondre à l'ordre de la clause in.

C'est la question initiale que je travaille.

Je voudrais modifier la requête ci-dessous pour qu'une ligne contenant progress=2 se produit avant progress=4 et progress=7 pour chaque session_id Lors de la commande du formation_page_hits passer datetime.

Voici la requête actuelle:

SELECT  COUNT(*)
FROM    (
    SELECT  session_id
    FROM    formation_page_hits
    WHERE   progress IN (2, 4, 7)
            AND datetime >= '2011-03-23'
            AND datetime < '2011-03-24'
    GROUP BY
            session_id
    HAVING  COUNT(DISTINCT progress) = 3
    ) q

Ces entrées

datetime,               session_id, progress
('2011-03-01 01:02:11', 'abc',      2)
('2011-03-01 01:02:12', 'abc',      4)
('2011-03-01 01:02:13', 'abc',      7)

devrait être un match pour la requête, mais:

datetime,               session_id, progress
('2011-03-01 01:02:11', 'abc',      4)
('2011-03-01 01:02:12', 'abc',      2)
('2011-03-01 01:02:13', 'abc',      7)

ne devrait pas être un match.

En outre:

datetime,               session_id, progress
('2011-03-01 01:02:11', 'abc',      4)
('2011-03-01 01:02:12', 'abc',      2)
('2011-03-01 01:02:13', 'abc',      4)
('2011-03-01 01:02:14', 'abc',      7)

devrait être un match.

Était-ce utile?

La solution

La manière la plus courante est de doubler l'auto-jointure pour se retrouver avec une jointure à trois voies sur l'heure de date ascendante. Cependant, ce n'est pas une requête bien performante.

select *
from
(
    SELECT  session_id, group_concat(concat('|',progress,'/') order by datetime) list
    FROM    formation_page_hits
    WHERE   progress IN (2, 4, 7)
            AND datetime >= '2011-03-23'
            AND datetime < '2011-03-24'
    GROUP BY session_id
    HAVING  COUNT(DISTINCT progress) = 3
) X
where list like '%|2/%|4/%|7/%'
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top