【问题标题】:How to use conditions in SQLite (like if-statements, etc.)如何在 SQLite 中使用条件(如 if 语句等)
【发布时间】:2011-10-21 15:32:53
【问题描述】:

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

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

这是我目前所拥有的:

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 中使用这种条件,这就是我需要帮助的地方。

提前非常感谢!

【问题讨论】:

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


    【解决方案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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-08-03
      • 2016-05-28
      • 2018-06-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多