Подсчитать из второй таблицы, количество записей за несколько промежутков времени
SELECT t1.*,
COUNT(CASE WHEN t2.time >= UNIX_TIMESTAMP() - 86400) AS 24_hours,
COUNT(CASE WHEN t2.time >= UNIX_TIMESTAMP() - 172800) AS 48_hours,
COUNT(CASE WHEN t2.time >= UNIX_TIMESTAMP() - 259200) AS 72_hours
FROM table1 AS t1
LEFT JOIN table2 AS t2 ON t2.t1_id = t1.id
Не выходит, пытаюсь подсчитать, добавить 3 поля, 3 промежутка времени за которые по каждым из них. Необходимо подсчитать количество записей во второй таблице...
Ответы (1 шт):
Для подсчета количества записей во второй таблице в зависимости от времени, вам нужно использовать агрегатную функцию COUNT()
вместе с условными выражениями SUM()
или другими агрегатными функциями. Если вы хотите добавить три поля, которые показывали бы количество записей за последние 24, 48 и 72 часа, ваш запрос можно модифицировать следующим образом:
SELECT
t1.*,
SUM(CASE WHEN t2.time >= UNIX_TIMESTAMP() - 86400 THEN 1 ELSE 0 END) AS count_24_hours,
SUM(CASE WHEN t2.time >= UNIX_TIMESTAMP() - 172800 THEN 1 ELSE 0 END) AS count_48_hours,
SUM(CASE WHEN t2.time >= UNIX_TIMESTAMP() - 259200 THEN 1 ELSE 0 END) AS count_72_hours
FROM
table1 AS t1
LEFT JOIN
table2 AS t2 ON t2.t1_id = t1.id
GROUP BY
t1.id;
Разбор запроса:
1. SUM(CASE WHEN ... THEN 1 ELSE 0 END)
: Эта конструкция считает, сколько раз условие выполняется, добавляя 1 для каждой записи, которая попадает под условие. Таким образом, для каждого временного промежутка вы получите количество соответствующих записей.
2. GROUP BY t1.id
: Группировка по идентификатору из первой таблицы, чтобы получить суммированные результаты для каждой записи из table1
.
3. LEFT JOIN
: Используется для получения всех записей из table1
даже в том случае, если у них нет соответствующих записей в table2
.
Этот запрос должен корректно подсчитать количество записей за каждый временной промежуток и вернуть его в виде отдельных столбцов для каждой записи в первой таблице.