Код: Выделить всё
CREATE TABLE `messages` (
`ID` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
`Arrival` TIMESTAMP NOT NULL,
`SenderID` INT UNSIGNED NOT NULL,
-- Fields describing messages skipped
PRIMARY KEY (`SenderID`, `Arrival`, `ID`) USING BTREE,
INDEX `ID` (`ID`) USING BTREE,
INDEX `Arrival_SenderID` (`Arrival`, `SenderID`) USING BTREE
)
Код: Выделить всё
WITH t AS (
SELECT `Messages`.`SenderID`, `Messages`.`Arrival`,
LAG(`Arrival`) OVER(PARTITION BY `Messages`.`SenderID` ORDER BY `Messages`.`Arrival`) AS `Prev`,
LEAD(`Arrival`) OVER(PARTITION BY `Messages`.`SenderID` ORDER BY `Messages`.`Arrival`) AS `Next`
FROM `Messages`
INNER JOIN `Senders` ON `Senders`.`SenderID` = `Messages`.`SenderID` AND `Senders`.`Active` IS TRUE
WHERE `Arrival` BETWEEN @aFrom AND @aTo
)
SELECT `SenderID`, IFNULL(`Prev`, @aFrom) AS `From`, `Arrival` AS `To` FROM t
WHERE TIMESTAMPDIFF(SECOND, IFNULL(`Prev`, @aFrom), `Arrival`) > @aDays * 24 * 3600
UNION
SELECT `SenderID`, `Arrival` AS `From`, IFNULL(`Next`, @aTo) AS `To` FROM t
WHERE TIMESTAMPDIFF(SECOND, `Arrival`, IFNULL(`Next`, @aTo)) > @aDays * 24 * 3600
ORDER BY `SenderID`, `From`;
< /code>
Но такой запрос имеет этот объясняющий вывод: < /p>
id < /th>
select_ lelect_ /> Таблица < /th>
разделы < /th>
type < /th>
возможно ,_keys < /th>
key < /th>
key_len < /th>
ref < /th>
невыханный /> (null) < /td>
14430 < /td>
100,00 < /td>
, используя где; Использование временного; Использование Filesort < /td>
< /tr>
2 < /td>
неполный полученное < /td>
< /td>
p202412 < /td>
/> первичный, grrival_senderid < /td>
первичный < /td>
4 < /td>
tstestdb.senders.senderid
справа; "> 50,00 < /td>
Использование где; Использование индекса < /td>
< /tr>
3 < /td>
Union < /td>
< /td>
(null) < /td>
< /td> < /td> < /td> /> (null) < /td>
(null) < /td>
(null) < /td>
(null) < /td>
2700140 < /td>
100,00 < /td>
Использование, где < /td>
< /tr>
(null) < /td>
Союз-результат < /td>
< /td> /> (null) < /td>
all < /td>
(null) < /td>
(null) < /td>
(null) < /td>
(null) < /td>
right; "> (null) < /td>
(null) < /td>
с использованием временного; Использование Filesort
`Senders`.`SenderID`Подробнее здесь: https://stackoverflow.com/questions/794 ... -filesorts