ユーザーとボット (基本的にはステート マシン) の間のすべてのメッセージを格納するテーブルがあり、各ユーザーの平均応答時間を計算するために、このテーブルからメッセージ/応答のすべてのペアを見つけようとしています。注意点は、すべての送信メッセージが応答を受け取るわけではないということです。
各行には、message_id、user_id、created_at (タイムスタンプ)、state_code、および発信 (ブール値) が格納されます。
ラグとリードを使用して関連するメッセージのペアを見つけ、作成された値の差を計算することを意図して、ウィンドウ関数を見てきました。各ユーザーの平均は、各ユーザーの平均を示します。反応時間。これの問題は、両方のメッセージが同じ sate_code で発行されたことを保証する方法がないことです。アイデア?
更新:ユーザーのメッセージが同じ状態コードを持っている場合、ユーザーのメッセージが特定の送信メッセージへの応答であることを保証できます。たとえば、
╔════════════╦═════════╦════════════╦════════════╦══════════╗
║ message_id ║ user_id ║ created_at ║ state_code ║ outgoing ║
╠════════════╬═════════╬════════════╬════════════╬══════════╣
║ 1 ║ 11 ║ mm/dd/yy ║ 20 ║ t ║
║ 2 ║ 11 ║ mm/dd/yy ║ 20 ║ f ║
║ 3 ║ 11 ║ mm/dd/yy ║ 22 ║ t ║
║ 4 ║ 11 ║ mm/dd/yy ║ 21 ║ t ║
║ 5 ║ 12 ║ mm/dd/yy ║ 45 ║ t ║
║ 6 ║ 12 ║ mm/dd/yy ║ 46 ║ f ║
║ 7 ║ 12 ║ mm/dd/yy ║ 46 ║ t ║
║ 8 ║ 12 ║ mm/dd/yy ║ 20 ║ f ║
║ 9 ║ 12 ║ mm/dd/yy ║ 43 ║ t ║
║ 10 ║ 13 ║ mm/dd/yy ║ 20 ║ t ║
╚════════════╩═════════╩════════════╩════════════╩══════════╝
この場合、ペアはメッセージ 1 と 2、およびメッセージ 6 と 7 です。ただし、ユーザー 1 は状態 20 で受信した送信メッセージの 1 つに状態 20 から応答しているため、メッセージ 1 と 2 のみが重要です。