2014-10-27 4 views
0

Я использую функцию недели, как так:Показать неделю дата начала с неделю()

SELECT 
    sub.id AS ARID, 
    WEEK(my.data) AS Week, 

Можно добавить дату начала недели, что неделя соответствует?

Что-то вроде:

SELECT 
    sub.id AS ARID, 
    WEEK(my.data) AS Week, 
    MIN(my.data) AS WKBeginning 

Использование МИН таким образом я удалить много данных непреднамеренно - она ​​должна быть оторвана fromt он даже данные. Иными словами, я хотел бы отображать неделю как дату, а не число, которое по строкам «Понедельник-2014-09-04»

Возможно ли это?

+1

Мой ответ был некорректным при некоторых обстоятельствах, я обновил его с лучшим (и правильным) решением. – jpw

ответ

1

Мой первый ответ оказался неверным, если исходная таблица не включала полный диапазон дат недели (в частности, в первый день недели).

Правильный путь заключается в использовании ADDDATE():

ADDDATE(my.data, INTERVAL 1-DAYOFWEEK(my.data) DAY) AS CorrectWKBeginning, 

Связанный подзапрос долженне работу , когда первый день недели не входит в данных:

SELECT 
    id, 
    WEEK(d) AS Week, 
    ADDDATE(d, INTERVAL 1-DAYOFWEEK(d) DAY) AS CorrectWKBeginning, 
    (SELECT MIN(d) FROM t WHERE WEEK(d) = WEEK(t2.d)) as IncorrectWKBeginning 
FROM t t2 

Sample SQL Fiddle

Возможно, вам понадобится использовать week() с параметрами, чтобы установить начальный день недели, и если он рассчитывается с 0-53 или 1-53, см. MySQL manual for reference.

+0

Большое спасибо, второй ответ гораздо проще, чем моя голова –

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