我有一个名为asset_usages 的表,它记录了查看者对资产的查看。相关领域是
id (int)
asset_id (int)
viewer_type (string)
viewer_id (int)
viewed_at (datetime)
我刚刚添加了一个名为 time_between_viewings 的新字段,它是一个表示秒数的 int 字段。我想将其设置为自上次查看该资产以来的时间(以秒为单位)。所以,如果我有这四个记录:
+-----+----------+-----------+-------------+---------------------+-----------------------+
| 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 是什么?我不太明白。
重要提示:数据并不总是按时间顺序插入到数据库中。即,您可以有两条记录 A 和 B,其中 B 具有更高的 id,但 A 具有较晚的值 view_at。因此,查找具有较低 id 的第一个匹配记录不一定会给您之前由同一个人查看的记录 - 您需要检查数据库中的所有记录。
谢谢!最大限度
编辑 - 声明 time_between_viewings 是一个表示秒的 int 字段。
编辑 - 添加了几行作为具有更高 id 但更早时间戳的行的示例
编辑 - 我刚刚意识到我没有正确规定这个问题。time_between_viewings 应该等于自同一查看器上次查看资产以来的时间,即记录与具有相同asset_id、viewer_id 和viewer_type 的上一个(基于viewed_at)记录之间的时间。我提供的示例数据仍然有效,但我可以输入一些不同的 viewer_id 和 viewer_type 值来充实示例。