sql >> Databasteknik >  >> RDS >> Mysql

Mysql-lösning för fönsterfunktioner

MySQL har inget stöd för fönsterfunktioner, men du kan använda en korrelerad underfråga i SELECT lista för att hämta exakt en kolumn:

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

Gör EXPLAIN Det. Detta är ungefär detsamma när det gäller exekveringslogik som CROSS APPLY i SQL Server.

Ett annat tillvägagångssätt är en självanslutning:

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 båda metoderna för prestanda.

Du kan göra mycket mer kreativa kopplingar, som

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


  1. Kontrollera för maximal längd av på varandra följande dagar som uppfyller specifika villkor

  2. Är Google Data Analytics Professional-certifikatet värt det?

  3. psql:servern stängde anslutningen oväntat

  4. MySQL Getting around error 1093