LINUX.ORG.RU

Как сделать такой UPDATE?

 


0

1

В общем, в базе есть записи, у каждой записи есть поле dt, содержащее Timestamp времени добавления записи.

Примерный вид:
id | user | data | dt

По каждому пользователю записи «кучками», т.е. идет например 10 записей на интервале от 20 сек до 20 мин, далее все сутки пусто - следующие опять примерно в это время. Т.е. интервал между «кучами» не менее 23 часов.

Нужно добавить еще одну колонку в таблицу - dt_start. И вот в ней внутри каждой «кучи» надо проставить _минимальный_ Timestamp из этой кучи.

Подскажите как это сделать

★★★★★

Решение «в лоб»:

SELECT user, MIN(dt) FROM $table WHERE dt BETWEEN $ts_start AND $ts_start + 86400 GROUP BY user;
UPDATE table SET dt_start = $min WHERE user = $user AND dt BETWEEN $ts_start AND $ts_start + 86400;

Если mysql достаточно свежий, то можно попробовать window functions

anonymous
()
Ответ на: комментарий от anonymous

WHERE dt BETWEEN $ts_start AND $ts_start + 86400

Вот как раз это не подходит, т.к. дат уже на полгода накопилось и у каждого пользователя дата-время старта разные. Вот пока и не понял как сделать.

Qwentor ★★★★★
() автор топика

Т.е. интервал между «кучами» не менее 23 часов.

Если вероятные, но редкие двоящиеся группы не страшат, то группировать по UNIX_TIMESTAMP(dt) div 86400

anonymous
()
Ответ на: комментарий от Gonzo

само собой. добавить колонку, а потом update для нового поля. вот с update загвоздка

Qwentor ★★★★★
() автор топика
Ответ на: комментарий от anonymous

группировать по UNIX_TIMESTAMP(dt) div 86400

хм, а ведь да. хоть и с некоторыми ошибками. спасибо

В общем, предлагайте, если у кого есть идеи лучше. Если других вариантов нет, то сделаю так, а ошибки исправлю вручную средствами малой автоматизации.

Qwentor ★★★★★
() автор топика
Ответ на: комментарий от Qwentor

Двоения групп возникают из-за числа 86400. Суть в том, что условие div 86400 рубит с плеча и разделяет группу,пересекающую 00:00 надвое.

Тут надо число подобрать. 00:23:43=1423 сек, например

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.