MySQL группировка по неделям - PullRequest
8 голосов
/ 15 июля 2011

У меня есть таблица со следующими полями:

  • id
  • amount_sale
  • the_date (целое число метки времени unix)
  • payment_type (можетбыть наличными или счетом)

Я пытаюсь создать запрос, который будет группировать все продажи по каждой неделе года, а затем разделять сумму количества_продаж за каждую неделю на моей странице.

Пример:

week 1 = $26.00  
week 2 = $35.00  
week 3 = $49.00

и т. Д.Я использую этот запрос, но он не работает:

  SELECT SUM(`amount_sale`) as total 
    FROM `sales` 
   WHERE `payment_type` = 'Account' 
GROUP BY WEEK(`the_date`)

Ответы [ 4 ]

31 голосов
/ 15 июля 2011

Если вы храните the_date как целое число, вам сначала нужно преобразовать его в дату и время, используя функцию FROM_UNIXTIME:

 SELECT SUM(`amount_sale`) as total 
FROM `sales` 
WHERE `payment_type` = 'Account' 
GROUP BY WEEK(FROM_UNIXTIME(`the_date`))  

ОБНОВЛЕНИЕ :
Также вы можетехотите вывести номер недели,

SELECT CONCAT('Week ', WEEK(FROM_UNIXTIME(`the_date`))) as week_number,
SUM(`amount_sale`) as total 
FROM `sales` 
WHERE `payment_type` = 'Account' 
GROUP BY WEEK(FROM_UNIXTIME(`the_date`))
4 голосов
/ 15 июля 2011

Попробуйте также выбрать недели в своем запросе, например:

  SELECT SUM(`amount_sale`) as total, WEEK(`the_date`) as week
  FROM `sales` 
  WHERE `payment_type` = 'Account' 
  GROUP BY week ORDER BY week ASC

Если у вас есть недели, охватывающие несколько лет, вы также можете выбрать год из the_date и заказать его, например:

  ORDER BY week ASC, year ASC
0 голосов
/ 15 июля 2011

Поскольку the_date является меткой времени Unix, функция WEEK не будет работать. Вместо этого вы можете сделать это:

GROUP BY неделя (FROM_UNIXTIME (the_date))

Имейте в виду, это не будет работать должным образом, так как эту функцию нужно будет применять к каждой строке в таблице, к которой вы обращаетесь.

0 голосов
/ 15 июля 2011

возьмите date и get the week:

SELECT DATEPART( wk, getdate())  --this is assuming SQL server

, а затем group на этом.

...