視聴者によるアセットの表示を記録する asset_usages というテーブルがあります。関連するフィールドは次のとおりです。
id (int)
asset_id (int)
viewer_type (string)
viewer_id (int)
viewed_at (datetime)
追加したばかりの新しいフィールド time_between_viewings があり、これは秒を表す int フィールドです。これを、そのアセットが最後に表示されてからの時間 (秒単位) に設定したいと考えています。したがって、次の 4 つのレコードがあるとします。
+-----+----------+-----------+-------------+---------------------+-----------------------+
| id | asset_id | viewer_id | viewer_type | viewed_at | time_between_viewings |
+-----+----------+-----------+-------------+---------------------+-----------------------+
| 506 | 7342 | 1182 | User | 2009-01-05 11:10:01 | NULL |
| 509 | 7342 | 1182 | User | 2009-01-05 11:12:47 | NULL |
| 514 | 6185 | 1182 | User | 2009-01-05 11:14:28 | NULL |
| 524 | 6185 | 1182 | User | 2009-01-05 11:28:18 | NULL |
| 618 | 1234 | 1182 | User | 2009-01-05 11:29:03 | NULL |
| 729 | 1234 | 1182 | User | 2009-01-05 11:29:01 | NULL |
+-----+----------+-----------+-------------+---------------------+-----------------------+
次に、time_between_viewings を次のように設定する必要があります。
+-----+----------+-----------+-------------+---------------------+-----------------------+
| id | asset_id | viewer_id | viewer_type | viewed_at | time_between_viewings |
+-----+----------+-----------+-------------+---------------------+-----------------------+
| 506 | 7342 | 1182 | User | 2009-01-05 11:10:01 | NULL |
| 509 | 7342 | 1182 | User | 2009-01-05 11:12:47 | 166 |
| 514 | 6185 | 1182 | User | 2009-01-05 11:14:28 | NULL |
| 524 | 6185 | 1182 | User | 2009-01-05 11:28:18 | 830 |
| 618 | 1234 | 1182 | User | 2009-01-05 11:29:03 | 2 |
| 729 | 1234 | 1182 | User | 2009-01-05 11:29:01 | NULL |
+-----+----------+-----------+-------------+---------------------+-----------------------+
ここで、166 と 830 は、各ペア間の時間差 (秒単位) です。
このフィールドにデータを入力するための SQL は何でしょうか? 私はそれを理解することはできません。
重要な注意: データは常にデータベースに時系列で挿入されるわけではありません。つまり、2 つのレコード A と B を持つことができます。ここで、B の方が ID が高く、A の方が Viewed_at の値が遅いということです。そのため、ID が小さい最初の一致レコードを探しても、必ずしも同じ人物による以前の表示が得られるとは限りません。データベース内のすべてのレコードを調べる必要があります。
ありがとう!最大
編集 - time_between_viewings は秒を表す int フィールドであると述べました。
編集 - より高いIDを持つが以前のタイムスタンプを持つ行の例として、いくつかの行を追加しました
編集 - 質問を適切に規定していないことに気付きました。time_ between_viewings は、アセットが同じビューアーによって最後に表示されてからの時間、つまり、レコードと、同じ asset_id、viewer_id、および viewer_type を持つ以前の (viewed_at に基づく) レコードとの間の時間と等しくなければなりません。私が提供した例のデータはまだ保持されていますが、いくつかの異なる viewer_id と viewer_type の値を入れて、例を少し肉付けすることもできました。