2017-02-06 2 views
0

Скажем, у нас есть таблица posts со столбцами: id, title, expires_at. Мы хотим показать, сколько сообщений не «истек» каждую неделю каждого года.MYSQL: группировка по неделям, где больше, чем в понедельник

Может быть более простой способ положить это будет: «число сообщений, сгруппированных по неделям года, когда expires_at дата велика, то начало каждой недели»

Например:

------------------------------------------------- 
| Year | Week | posts_not_expired | 
------------|-----------|-----------------------| 
| 2017 | 01  | 22     | 
| 2017 | 02  | 103     | 
| 2017 | 03  | 7     | 
| ...  | ...  | ...     | 
| 2009 | 52  | 63     | 
|-----------|-----------|-----------------------| 

Что мы имеем до сих пор:

SELECT 
    COUNT(id) as posts_not_expired, 
    YEAR(expires_at) * 100 as Year, 
    YEARWEEK(expires_at) as Week, 
FROM posts 
GROUP BY Year, Week 
+1

Вы пытались выполнить SQL-запрос? – emaillenin

+0

Да, сбой, я не хочу загромождать ответ здесь с плохим SQL. – AndrewMcLagan

+2

можете ли вы предоставить небольшой набор образцов, который бы создал этот результат? Поместить его в http://sqlfiddle.com/ было бы еще лучше. – Sean

ответ

2

Вы можете использовать DAYOFWEEK рассчитывать не просроченные сообщения для данной недели. (где 1 = воскресенье, 2 = понедельник, 7 = суббота)

SELECT 
    YEAR(expires_at) as `Year`, 
    WEEKOFYEAR(expires_at) as `Week`, 
    SUM(DAYOFWEEK(expires_at) > 2) as `posts_not_expired` 
FROM posts 
GROUP BY YEAR(expires_at), WEEKOFYEAR(expires_at) 
+0

Вау ... Так просто! Спасибо. – AndrewMcLagan

+0

Последнее, как я могу форматировать «Неделю», чтобы быть только его числом недели, а не 200917? – AndrewMcLagan

+0

использование 'неделяofyear'. –

Смежные вопросы