У меня есть таблица с 3 столбцами: user
, value
, и date
. Основной запрос возвращает значения для определенного пользователя на основе диапазона дат:
SELECT date, value FROM values
WHERE user = '$user' AND
date BETWEEN $start AND $end
То, что я хотел бы, - чтобы результаты также имели столбец, указывающий на недельное число относительно диапазона дат. Таким образом, если диапазон дат является 01.01.2010 - 20.01.2010, то любые результаты первого Sun - Находились того диапазона, week 1
, следующий Sun - Расположился, week 2
, и т.д., Если диапазон дат запускается в субботу, то только следует из того одного дня, был бы week 1
. Если бы диапазон дат запускается в четверг, но первый результат находится в следующий понедельник, это было бы week 2
, и существуют нет week 1
результаты.
Это - что-то довольно простое для добавления к запросу? Единственные идеи, которые я могу придумать, были бы основаны на недельном числе в течение года или недельном числе на основе самих результатов (где в том втором примере выше, первый результат всегда добирается week 1
).
$start = "05/27/2010";
$end = "06/13/2010";
//Query
Result:
week date user value
1 05/28/2010 joe 123
3 06/07/2010 joe 123
3 06/08/2010 joe 123
4 06/13/2010 joe 123
Это легко сделать с помощью этого простого и очевидного выражения :)
SELECT ...,
FLOOR(
(
DATEDIFF(date, $start) +
WEEKDAY($start + INTERVAL 1 DAY)
) / 7
) + 1 AS week_number;
Некоторое объяснение: это выражение просто вычисляет разницу между заданной датой и датой начала в днях, затем преобразует это число в недели с помощью FLOOR («разница в днях» / 7) + 1
. Это просто, но так как это работает только тогда, когда $ start - воскресенье, мы должны добавить смещение для других дней недели: WEEKDAY ($ start + INTERVAL 1 DAY)
, что равно 0 для Sun, 1 для Mon, ..., 6 для сб.