sql >> Databáze >  >> RDS >> Mysql

Řešení Mysql pro funkce okna

MySQL nepodporuje funkci okna, ale můžete použít korelované poddotazy v SELECT seznam pro načtení přesně jednoho sloupce:

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

Proveďte EXPLAIN to. To je z hlediska logiky provádění stejné jako CROSS APPLY v SQL Server.

Dalším přístupem je vlastní připojení:

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

Otestujte oba přístupy z hlediska výkonu.

Můžete udělat mnohem kreativnější spojení, jako

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


  1. mysql počítat do PHP proměnné

  2. Vysvětlení SQL Server Příkaz ALTER TABLE ADD COLUMN

  3. Jak uložím řetězec delší než 4000 znaků v databázi Oracle pomocí Java/JDBC?

  4. Cloud Disaster Recovery pro MariaDB a MySQL