MySQL Query для расчета предыдущей недели - PullRequest
3 голосов
/ 16 июля 2009

Я хотел бы рассчитать общую сумму заказа за предыдущую неделю.

Я получил запрос на получение данных за последние 7 дней с текущей даты.

SELECT SUM(goods_total) AS Total_Amount  FROM orders
WHERE order_placed_date >= date_sub(current_date, INTERVAL 7 day);

Теперь, как я могу получить данные только за предыдущую неделю, исключая эту неделю.

Например, На этой неделе я заработал 15 000 долларов, а на прошлой неделе я заработал 14 000 долларов.

Я получаю $ 15 000, выполнив вышеуказанный запрос.

Но я не знаю, как рассчитать предыдущую неделю.

Ответы [ 8 ]

5 голосов
/ 16 июля 2009

На основании дополнительной информации, которую вы дали в ответе Алекса, я думаю, что может сработать следующее:

SELECT SUM(goods_total) AS Total_Amount, "Previous week" AS Week FROM orders
WHERE order_placed_date >= date_sub(current_date, INTERVAL 14 day) 
AND order_placed_date < date_sub(current_date, INTERVAL 7 day)
UNION
SELECT SUM(goods_total) AS Total_Amount, "This week" AS Week FROM orders
WHERE order_placed_date >= date_sub(current_date, INTERVAL 7 day) 

Это должно вернуть две строки и два столбца с общей суммой за каждую неделю.

3 голосов
/ 20 сентября 2012

Предыдущие записи за 8-14 дней, исключая записи за последние 7 дней, запрос:

SELECT * FROM `Table_Name` 
WHERE `Field_Name` >= DATE_SUB(NOW(),INTERVAL 14 DAY) 
AND `Field_Name` < DATE_SUB(NOW(),INTERVAL 7 DAY)
  • Field_Name: должна быть действительная дата в формате YYYY-mm-dd (2012-09-20).
  • Table_Name: откуда вам нужно получить записи.
2 голосов
/ 16 июля 2009

Если вы хотите "скользящие недели" (скользящие окна продолжительностью 7 дней) вместо недель, начинающихся в воскресенье (или в другие конкретные дни недели),

SELECT SUM(goods_total) AS Total_Amount FROM orders
WHERE order_placed_date BETWEEN
 date_sub(current_date, INTERVAL 14 day) AND
 date_sub(current_date, INTERVAL 8 day);
0 голосов
/ 09 февраля 2012
mysql> SELECT DATE_SUB(current_date, INTERVAL WEEKDAY(current_date)+8 DAY) last_sunday
, YEARWEEK(DATE_SUB(current_date, INTERVAL WEEKDAY(current_date)+8 DAY)) last_week_of_year
, DATE_SUB(current_date, INTERVAL WEEKDAY(current_date)+1 DAY) this_sunday
, YEARWEEK(DATE_SUB(current_date, INTERVAL WEEKDAY(current_date)+1 DAY)) this_week_of_year;

*************************** 1. row ***************************
      last_sunday: 2012-01-29
last_week_of_year: 201205
      this_sunday: 2012-02-05
this_week_of_year: 201206
0 голосов
/ 16 июля 2009

А как насчет следующего запроса:

SELECT   count(order_placed_date) 
FROM     orders
WHERE    YEARWEEK(order_placed_date) = YEARWEEK(CURRENT_DATE - INTERVAL 7 DAY) 
0 голосов
/ 16 июля 2009

Попробуйте:

SELECT SUM(goods_total) AS Total_Amount  FROM orders
WHERE order_placed_date >= date_sub(current_date, INTERVAL 14 day) 
AND order_placed_date < date_sub(current_date, INTERVAL 7 day);
0 голосов
/ 16 июля 2009

Вы можете использовать DATE_SUB () .

0 голосов
/ 16 июля 2009

Самый простой способ сделать это - использовать Функции даты и времени mysql

WEEKOFYEAR ()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...