У меня есть таблица с именем 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 для заполнения этого поля? Я не могу это понять.
ВАЖНОЕ ЗАМЕЧАНИЕ: данные не всегда вставляются в db в хронологическом порядке. Т.е. у вас могут быть две записи A и B, где B имеет более высокий идентификатор, но A имеет более позднее значение для view_at. Таким образом, поиск первой сопоставимой записи с более низким идентификатором не обязательно предоставит вам предыдущий просмотр одним и тем же человеком - вам нужно будет изучить все записи в базе данных.
спасибо! max
EDIT - указано, что time_between_viewings является полем int, представляющим секунды.
EDIT - добавил пару строк в качестве примера ряд с более высоким идентификатором, но ранее метки времени
EDIT - я просто понял, что я не оговаривают вопрос должным образом. Время_between_viewings должно быть равно времени, прошедшему с того момента, как актив последний раз просматривался тем же средством просмотра, то есть временем между записью и предыдущей (на основе view_at) записью, которая имеет те же объекты asset_id, viewer_id и viewer_type. Данные примера, которые я дал, все еще сохраняются, но я мог бы добавить несколько значений viewer_id и viewer_type, чтобы немного проиллюстрировать пример.
Пожалуйста, при необходимости добавьте устройство в 'time_between_viewings', для будущих сопровождающих. По крайней мере, вы должны добавить комментарий к нему, если вы не можете изменить имя самого столбца. –
* «данные не всегда вставляются в db в хронологическом порядке» * Добавьте несколько строк, которые иллюстрируют это ваши данные образца. –
@ Clockwork-Muse - добавлено примечание о time_between_viewings –