@maxeee52

Как построить SQL запрос на получение акций в зависимости от даты завершения?

Образно должно быть 2 части: активные и неактивные.
Необходимо всё вместить в один запрос.
Пример полученных данных:

Дата окончания (Просто даты про возростанию начиная от сегодня):
  • сегодня
  • завтра
  • через неделю
  • через месяц

(и в этой же выдаче необходимо получить уже прошедшие акции)
(Просто даты про убыванию начиная от сегодня):
  • вчера
  • позавчера
  • неделю назад

  • Вопрос задан
  • 75 просмотров
Решения вопроса 1
@maxeee52 Автор вопроса
Не хотелось бы использовать
isActive
, т.к. данное поле каждый раз придётся обновлять при обращении к акциям

На данный момент нагуглил такой вариант
SELECT * FROM special WHERE date_end > NOW()
UNION
SELECT * FROM special WHERE  date_end < NOW()

И это вроде как даже решает проблему сортировки, хотя она здесь и не задана, но выдача правильная

5e208c7c9b8f5472331937.jpeg
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Для активности / неактивности в выдачу запроса добавьте вычисляемое поле:DATE(NOW()) <= date_end AS isActive

Для группировки по вчера/позавчера придется последовательно сравнивать дату с
CASE TRUE
WHEN date_end >= DATE_ADD(NOW(), INTERVAL 1 WEEK))
  AND date_end < DATE_ADD(NOW(), INTERVAL 1 MONTH))  THEN "через месяц"
WHEN date_end >= DATE_ADD(NOW(), INTERVAL 1 DAY))
  AND date_end < DATE_ADD(NOW(), INTERVAL 1 WEEK))  THEN "через неделю"
...
END AS kogda
и подобными
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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