如何在SQLite中使用条件(如if语句等)

时间:2011-08-07 00:40:20

标签: sql sqlite conditional-statements sql-date-functions

我在数据库中有一个表,其中一列包含日期,另一列包含分数。基本上,我想要做的就是在一周内获得最高分。

周可以在任何一天(例如从星期五到星期四)开始,并且由用户定义。

这是我到目前为止所做的:

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 个答案:

答案 0 :(得分:2)

我认为您需要使用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