Я подошел с той же проблемой, в последнее время. Поэтому, вот решение, работающее с временными таблицами. На самом деле, я предлагаю два решения.
Решение (А) идентифицирует последующую log_action_link с использованием подзапроса (очень трудоемкий)
# Very time-consuming
CREATE TEMPORARY TABLE tmp
(INDEX idlink_follow (idlink_follow))
SELECT idlink_va, time_spent_ref_action AS time_spent_action, idvisit, (
SELECT idlink_va FROM piwik_log_link_visit_action b
WHERE (a.idvisit = b.idvisit) AND (b.idlink_va < a.idlink_va)
ORDER BY idlink_va
LIMIT 1
) AS idlink_follow
FROM piwik_log_link_visit_action a
ORDER BY idvisit DESC, idlink_va DESC;
Раствор (B), зависит от чистой и полной piwik_log_link_visit_action
таблице. Обычно это так, но вы никогда не можете быть абсолютно уверены.
# Create table containing the time per action
# (requires a clean and complete piwik_log_link_visit_action)
CREATE TEMPORARY TABLE tmpA
SELECT idlink_va, time_spent_ref_action, idvisit
FROM piwik_log_link_visit_action
ORDER BY idvisit, idlink_va;
SELECT * FROM tmpA;
SET @lagID = NULL;
CREATE TEMPORARY TABLE tmp
(INDEX idlink_follow (idlink_follow))
SELECT @lagID AS idlink_follow, time_spent_ref_action AS time_spent_action, @lagID:=idlink_va AS idlink_va
FROM tmpA
ORDER BY idvisit, idlink_va;
DROP TEMPORARY TABLE tmpA;
на основе временной таблицы, страницы раз можно получить:
SELECT l.idvisit, t.time_spent_action, l.*
FROM piwik_log_link_visit_action l
LEFT JOIN tmp t ON (t.idlink_follow = l.idlink_va)
ORDER BY l.idvisit, l.server_time
ум, чтобы удалить временную таблицу.
DROP TEMPORARY TABLE tmp;
Поместите стол на http://www.sqlfiddle.com с некоторыми, например, данные –
Вот некоторые примеры данных: http://www.sqlfiddle.com/#!9/62f235/3 – LarsVegas
Здравствуйте Раймонд, как вы думаете, у вас есть решение? – LarsVegas