Mysql
 sql >> база данни >  >> RDS >> Mysql

Заобиколно решение на Mysql за функциите на прозореца

MySQL няма поддръжка на функция за прозорец, но можете да използвате корелирани подзаявки в SELECT списък, за да извлечете точно една колона:

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

Направете EXPLAIN то. Това е донякъде същото по отношение на логиката на изпълнение като CROSS APPLY в SQL Server.

Друг подход е самостоятелно присъединяване:

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

Тествайте и двата подхода за ефективност.

Можете да правите много по-креативни връзки, като

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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да пропуснете колони в CSV файл при импортиране в MySQL таблица с помощта на LOAD DATA INFILE?

  2. SYSDATE() срещу NOW() в MySQL:Каква е разликата?

  3. mysqli вмъкване - но само ако не е дубликат

  4. Как да транспонирате MYSQL db в PHP

  5. Дата и час в PHP скрипт