MySQL ne prend pas en charge la fonction de fenêtre, mais vous pouvez utiliser des sous-requêtes corrélées dans le SELECT
list pour récupérer exactement une colonne :
SELECT
event_id,
event_type,
event_time,
(SELECT COUNT(*) FROM events EC WHERE EC.event_type = E.event_type AND EC.event_time > E.event_time) AS subsequent_event_count
FROM
events E
WHERE ...
Faites EXPLAIN
ce. C'est un peu la même chose en termes de logique d'exécution que le CROSS APPLY
dans SQL Server.
Une autre approche est une auto-jointure :
SELECT
E.event_id,
E.event_type,
E.event_time,
COUNT(EC.event_id) AS subsequent_event_count
FROM
events E
LEFT JOIN events EC
ON E.event_type = EC.event_type AND E.event_type < EC.event_type
GROUP BY
E.event_id,
E.event_type,
E.event_time
Testez les performances des deux approches.
Vous pouvez faire beaucoup plus de jointures créatives, comme
EC.event_time > E.event_time AND EC.event_time < E.event_time + INTERVAL 1 DAY