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

Soluzione di MySQL per le funzioni della finestra

MySQL non ha il supporto per le funzioni della finestra, ma puoi usare una sottoquery correlata in SELECT list per recuperare esattamente una colonna:

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

Esegui EXPLAIN esso. Questo è più o meno lo stesso in termini di logica di esecuzione di CROSS APPLY in SQL Server.

Un altro approccio è un'adesione automatica:

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

Testa entrambi gli approcci per le prestazioni.

Puoi fare unioni molto più creative, come

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