Я использую следующий запрос, чтобы узнать разницу в pageviews
моих страниц, сравнивая последние 2 дня
SELECT PAGE, COUNT( * ) AS poso, (SUM(DATE(TIMESTAMP) = CURDATE()) - SUM(DATE(TIMESTAMP) = DATE_SUB(CURDATE( ), INTERVAL 1 DAY)) ) diff FROM `behaviour` WHERE DATE( TIMESTAMP ) >= DATE_SUB( CURDATE( ) , INTERVAL 1 DAY ) GROUP BY PAGE;
Запрос возвращает меня как страницы, как есть. Однако то, что я хочу сделать, – это иметь только 10 строк с наибольшей положительной разницей, а 10 – самую большую отрицательную разницу.
Как я могу это достичь?
Используйте объединение двух запросов, один получает Top 10, а другой получает дно 10 . Запрос будет выглядеть так:
Обновленный ответ
SELECT PAGE , poso , diff from ( ( SELECT PAGE, COUNT( * ) AS poso, (SUM(DATE(TIMESTAMP) = CURDATE()) - SUM(DATE(TIMESTAMP) = DATE_SUB(CURDATE( ), INTERVAL 1 DAY)) ) diff FROM `behaviour` WHERE DATE( TIMESTAMP ) >= DATE_SUB( CURDATE( ) , INTERVAL 1 DAY ) GROUP BY PAGE ORDER BY (SUM(DATE(TIMESTAMP) = CURDATE()) - SUM(DATE(TIMESTAMP) = DATE_SUB(CURDATE( ), INTERVAL 1 DAY)) ) desc LIMIT 10 ) UNION ( SELECT PAGE, COUNT( * ) AS poso, (SUM(DATE(TIMESTAMP) = CURDATE()) - SUM(DATE(TIMESTAMP) = DATE_SUB(CURDATE( ), INTERVAL 1 DAY)) ) diff FROM `behaviour` WHERE DATE( TIMESTAMP ) >= DATE_SUB( CURDATE( ) , INTERVAL 1 DAY ) GROUP BY PAGE ORDER BY (SUM(DATE(TIMESTAMP) = CURDATE()) - SUM(DATE(TIMESTAMP) = DATE_SUB(CURDATE( ), INTERVAL 1 DAY)) ) asc LIMIT 10 ) ) as u order by diff;