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

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

提前非常感谢!

最佳答案

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

关于sql - 如何在 SQLite 中使用条件(如 if 语句等),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6969954/

相关文章:

sql - 更高效的SQLite触发器来“汇总”多行

c# - I可查询。比较运算符(== 和 >=)的细节

ruby //现在或零

linux - 使用 AWK 检查多列中的条件,以从包含年龄、种族和性别的数据集中输出平均、最小、最大和总出现次数

sql - 尝试通过涉及 CASES 和聚合函数的别名进行搜索的 mysql 查询

sql - 使用sql删除字符串中的第一个逗号

sql - 将非规范化数据移动到报告数据库

android - 如何解决 close() was never explicitly called on database 错误

conditional-statements - 带标签/文本的 Cypress 条件测试

sql - 用替代方案替换 SQL Cursor 以提高性能