Добавление относительного недельного столбца числа к результатам MySQl

У меня есть таблица с 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
1
задан Anthony 27 May 2010 в 16:59
поделиться

1 ответ

Это легко сделать с помощью этого простого и очевидного выражения :)

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 для сб.

2
ответ дан 3 September 2019 в 00:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: