您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

窗口功能的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 APPLYsql 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
MySQL 2022/1/1 18:53:19 有385人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶