Как использовать условия в 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