В основном у меня есть таблица, содержащая пользовательские просмотры страниц.
как это
CREATE TABLE `pageViews` (
`statId` int(11) NOT NULL AUTO_INCREMENT,
`deviceId` varchar(36) DEFAULT NULL,
`userId` varchar(36) DEFAULT NULL,
`sessionId` varchar(36) DEFAULT NULL,
`actionType` varchar(45) DEFAULT NULL,
`actionDetail` json DEFAULT NULL,
`browser` varchar(250) DEFAULT NULL,
`resolution` varchar(10) DEFAULT NULL,
`language` varchar(10) DEFAULT NULL,
`uri` varchar(250) DEFAULT NULL,
`location` varchar(300) DEFAULT NULL,
`initial` tinyint(4) DEFAULT NULL,
`containerId` int(11) DEFAULT NULL,
`stepId` int(11) DEFAULT NULL,
`creationDate` bigint(13) DEFAULT NULL,
`logged` tinyint(4) DEFAULT '0',
PRIMARY KEY (`statId`),
KEY `event_creationDate` (`sessionId`,`creationDate`),
KEY `containerId_stepId` (`containerId`,`stepId`,`uri`),
KEY `containerId_initial` (`containerId`,`initial`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
Попытка выбрать строки из таблицы, содержащей около 1 миллиона записей, с помощью функции опережения для расчета времени, затраченного на каждую позицию
В настоящее время мне пришло в голову:
SELECT
sessionId,
if (
(lead(sessionId) OVER (ORDER BY sessionId, creationDate)) = sessionId,
((lead(creationDate) OVER (ORDER BY sessionId, creationDate)) - creationDate) / 1000,
null
) as timeSpent,
date_format(from_unixtime(creationDate/1000), '%Y-%m-%d') date
FROM
pageViews
но это действительно неэффективно, его возвращение строк в течение 10 минут +
поэтому мы ищем решения, которые были бы гораздо более надежными.
Моя конечная цель - получить что-то для этого
select
avg(totalSessionTime) averge,
date
from (
select
sum(timeSpent) totalSessionTime,
sessionId,
date
from (
SELECT
sessionId,
if (
(lead(sessionId) OVER (ORDER BY sessionId, creationDate)) = sessionId,
((lead(creationDate) OVER (ORDER BY sessionId, creationDate)) - creationDate) / 1000,
null
) as timeSpent,
date_format(from_unixtime(creationDate/1000), '%Y-%m-%d') date
FROM
pageViews
where
creationDate > 1500000000000
) z
where
timeSpent is not null
group by
sessionId, date
) y
group by
date;
Любые комментарии по индексам, sql и т. Д. Приветствуются