Как использовать условия в SQLite (например, операторы if и т. Д.) - PullRequest
2 голосов
/ 07 августа 2011

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

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

Вот что у меня есть:

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 Ответ

2 голосов
/ 07 августа 2011

Я думаю, вам нужно использовать оператор 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

...