Задавайте вопросы, мы ответим
Вы не зашли.
Есть таблица, subtask.
subtask_id status_id taken_at(время в секундах) filename
1 3 1303792954 2010-01-01
1 1 0 2010-01-02
1 1 0 2010-01-03
1 1 0 2010-01-04
2 1 0 2010-02-01
2 1 0 2010-02-02
3 3 1303792960 2010-03-01
Нужно составить 3 запроса, ничего в голову не приходит :
1 ый запрос запрос должен получить выборку таким образом, чтобы вначале были записи,
у которых меньше всего встречается subtask_id.
Вот что должно получиться
2 1 0 2010-02-01
2 1 0 2010-02-02
1 1 0 2010-01-02
1 1 0 2010-01-03
1 1 0 2010-01-04
2 ой запрос - в выборку должны попасть сначала записи:
2 1 0 2010-02-01
2 1 0 2010-02-02
1 1 0 2010-01-02
1 1 0 2010-01-03
1 1 0 2010-01-04
а потом
1 3 1303792954 2010-01-01
3 3 1303792960 2010-03-01
те те записи, у которых меньше всего встречается subtask_id и у которых status_id = 3
3 ий запрос что и первый, только должен сделать Update полей taken_at с приращением по времени в 180 секунд, т е каждое последующее время должно отличаться на 180 секунд и status_id поменять на 3
Вот что должно получиться
subtask_id status_id taken_at(время в секундах) filename
2 3 1303792954 2010-02-01
2 3 1303792954 +180 2010-02-02
1 3 1303792954 +360 2010-01-02
1 3 1303792954 + 540 2010-01-03
1 3 1303792954 + 720 2010-01-04
Заранее большое спасибо
Неактивен
1. Без подзапроса, видимо, никак.
SELECT .. FROM tablename JOIN
(SELECT subtask_id FROM tablename GROUP BY 1 ORDER BY COUNT(*) DESC) s USING (subtask_id)
WHERE status_id != 3;
2. Весь пункт 1 целиком и к нему еще записи с третьим статусом:
...
UNION
SELECT ... FROM tablename WHERE status_id = 3;
3. Тут Вам не надо делать никакую сортировку. Просто
UPDATE tablename SET taken_at = taken_at + INTERVAL 180 SECONDS, status_id = 3 WHERE status_id != 3;
Неактивен