Как использовать условия в SQLite (например, операторы if и т. Д.)

У меня есть таблица в базе данных с одним столбцом, содержащим даты, и другим, содержащим оценки. По сути, я хочу получить лучший результат за неделю.

Недели могут начаться в любой день (например, с пятницы по четверг), и это определяется пользователем.

Вот что у меня так далеко:

SELECT MAX(Series), DATE(DATE(Date, 'weekday 0'), '-7 days') dateStartOfWeek FROM SeriesScores
  WHERE Season = '2010-2011' 
  AND dateStartOfWeek = '2010-08-29'
  GROUP BY DateStartOfWeek

куда Series столбец, содержащий оценки и Date является (плохо) названной фактической датой.

Проблема с этим запросом состоит в том, что он работает для каждого дня, кроме дня, в который должна начинаться неделя.

Например: 2010-08-29 - воскресенье, и в этом примере я пытаюсь выяснить, в какую дату воскресенье данной недели. Моя функция работает для каждого дня этой недели, кроме 2010-08-29 (воскресенье), так как она пытается найти следующий день, который является воскресеньем (сам в этом случае). Чтобы компенсировать это, я возвращаюсь на 7 дней, чтобы получить правильное воскресенье, что создает ошибку для уже правильного воскресенья, так как этому не нужно возвращаться на 7 дней, иначе это одна неделя.

Я подумал, что мог бы легко решить эту проблему с помощью Java, но я хочу увидеть, как это должно быть сделано с помощью SQL.

Мое решение (я даже не знаю, можно ли это сделать) - проверить, совпадают ли date и dateStartOfWeek. Если это так, не вычитайте 7 дней с даты. Если это не так, сделайте, как я сделал в моем примере. Я не знаю, как использовать такие условия, как это в SQL, хотя, и здесь мне нужна помощь.

Заранее большое спасибо!

1 ответ

Решение

Я думаю, что вам нужно использовать CASE оператор - см. http://sqlite.awardspace.info/syntax/sqlitepg09.htm

РЕДАКТИРОВАТЬ - попробуйте:

SELECT MAX(Series), CASE WHEN STRFTIME ( '%w', Date ) = 0 THEN DATE(Date, 'weekday 0') ELSE DATE(DATE(Date, 'weekday 0'), '-7 days') END AS dateStartOfWeek FROM SeriesScores
  WHERE Season = '2010-2011' 
  AND dateStartOfWeek = '2010-08-29'
  GROUP BY DateStartOfWeek

см. http://www.sqlite.org/lang_datefunc.html

Другие вопросы по тегам