Как сделать сравнение двух значений в двух промежутках времени на SQL?
Здравствуйте! В общем, хотел спросить...
Итак, у нас имеется таблица, где записываются каждый день кол-во регистраций на сайте.
date | index
...
2014-08-27 | 4
2014-08-28 | 10
2014-08-29 | 0
....
Теперь к задаче. Требуется получить сумму всех регистраций на прошлой неделе, и на этой неделе (для сравнения). То есть мне нужны все значения пн-вс прошлой недели, и пн-вс текущей недели (при чем если сегодня четверг, то пн-чт и т.д)
SELECT 'Прошлая неделя' , SUM(t.index) as `qty` FROM table t WHERE DATE(t.date) IN ('Даты за прошлую неделю')
UNION
SELECT 'Текущая неделя', SUM(t.index) as `qty` FROM table t WHERE DATE(t.date) IN ('Даты за эту неделю')
Выведет:
Прошлая неделя | число
Текущая неделя | число
/* Вычисление суммы за текущую неделю */
SELECT
SUM(`index`) AS 'this_week'
FROM
`table`
WHERE
`date` >= DATE_SUB(NOW(), INTERVAL (WEEKDAY(NOW())) DAY) AND
`date` <= NOW()
;
/* Вычисление суммы за прошлую неделю */
SELECT
SUM(`index`) AS 'last_week'
FROM
`table`
WHERE
`date` >= DATE_SUB(NOW(), INTERVAL (7+WEEKDAY(NOW())) DAY) AND
`date` <= DATE_SUB(NOW(), INTERVAL 7 DAY)
Первый вариант не работает (синтактическая ошибка), а второй берет интервалом (например, с 21 по 28 августа, а мне надо с 18-24 (прошлая неделя), и 25 по 31 (текущая неделя)
синтактическая ошибка. и все равно я так понимаю, что данные будут браться интервалами (например с 21 по 28 - прошлая неделя),а мне надо,что запрос брал только чисто с прошлой недели и с текущей недели (например, с 18-24, и с 25-31). Что когда день проходил, неделя оставалась, а не плыла...
select
sum(case when date>now() - interval 7 day THEN index END) as sum1,
sum(case when date>now() - interval 14 day and date<now() - interval 7 day THEN index END) as sum2
from table
WHERE
date>now() - interval 14 day