sql >> データベース >  >> RDS >> Mysql

ウィンドウ関数のMysql回避策

    MySQLにはウィンドウ関数のサポートはありませんが、SELECTで相関サブクエリを使用できます 正確に1つの列を取得するためのリスト:

    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と少し同じです。 SQLServerで。

    別のアプローチは自己参加です:

    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. 次のイベントの日付を表示する

    2. 選択したポイントから特定の距離にあるすべてのアドレスを見つけるための最良のアプローチは何ですか

    3. MySQLのロックの粒度を理解する

    4. JDBCを使用してローカルホストに接続するにはどうすればよいですか?