sql >> Database teknologi >  >> RDS >> Mysql

Mysql-løsning til vinduesfunktioner

MySQL har ingen vinduesfunktionsunderstøttelse, men du kan bruge en korreleret underforespørgsel i SELECT liste for at hente præcis én kolonne:

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 ...
 

Udfør EXPLAIN det. Dette er lidt det samme med hensyn til eksekveringslogik som CROSS APPLY i SQL Server.

En anden tilgang er en selvtilslutning:

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

Test begge metoder for ydeevne.

Du kan lave meget mere kreative joinforbindelser, f.eks.

EC.event_time > E.event_time AND EC.event_time < E.event_time + INTERVAL 1 DAY
 


  1. Konverter dato til månedsnavn og år

  2. Udfyld PHP Array fra While Loop

  3. Sådan kontrolleres, om en beregnet kolonne er "vedvarende" i SQL Server

  4. Sådan går du gennem et mysql-resultatsæt