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

以前のレコードを見つける方法[n-per-groupmax(timestamp)

    変数を使用した最後のアプローチは合理的です。次のことも試してみてください:

    SELECT collect.*,
           (select max(timestamp)
            from data
            where data.channel_id = collect.channel_id AND data.timestamp < collect.timestamp
           ) AS prev_timestamp
    FROM data AS collect 
    WHERE collect.channel_id = 14 AND collect.timestamp >= 0 
    ORDER BY collect.timestamp;
    

    さらに、collect(channel_id、timestamp)にインデックスを作成します。

    編集:

    以下が最速かもしれません:

      select d.*,
             if(@channel_id = channel_id, @prev_timestamp, NULL) as prev_timestamp,
             @channel_id := channel_id, @prev_timestamp = timestamp
      from data d cross join
           (select @channel_id := 0, @prev_timestamp := 0) vars
      where collect.channel_id = 14 AND collect.timestamp >= 0 
      order by channel_id, timestamp;
    



    1. SQL-各レコードのストアドプロシージャを呼び出す

    2. MySQLでのテーブルメタデータの取得

    3. MySQLテーブルのデータを上書きする

    4. SELECT * FROMのショートカットはありますか?