sql - 重新创建可能需要IN的SELECT

标签 sql sqlite

给定具有以下两列的表
1)日期,DATE
2)天气,整数(0 =晴天,1 =雨,2 =雪)

我希望SELECT能返回下雨天和下雨天-+(N,M)天之内的所有日期。也就是说,如果(-+)N,M = 1,2并在今天(星期三)下雨,我想返回今天的日期,前提是包括从星期二到星期五的任何一天下雪,假设每天只有一个天气值。


范例1:
2011年1月1日,0
2011年1月1日,0
2011年1月2日,2
2011年1月3日,1
2011年1月4日,1
2011年1月5日,0
2011年1月6日,0


当(-+)N,M = 2,1-返回1/3,1/4


范例2:
2011年1月1日,0
2011年1月2日,2
2011年1月3日,1
2011年1月4日,1
2011年1月5日,1
2011年1月6日,0
2011年1月7日,2


当(-+)N,M = 1,2时,返回1/3,1/5

最佳答案

此查询应为您完成。将@N替换为之前的天数,并将@M替换为之后的天数。请注意,我假设您表的名称为t

SELECT DISTINCT rain.date
FROM t AS rain
JOIN t AS snow ON snow.date between rain.date - @N AND rain.date + @M 
    AND snow.weather = 2
WHERE rain.weather = 1


我在决定用什么方法比较sqlite中的日期时遇到了麻烦。我尝试查找它,但是得到的建议有冲突。 This sqlite doc page听起来像julianday是比较DATE的DAY部分的最佳方法。如果以上查询对您不起作用,请尝试使用使用julianday的日期版本来代替日期。

SELECT DISTINCT rain.date
FROM t AS rain
JOIN t AS snow ON julianday(snow.date) between julianday(rain.date) - @N AND julianday(rain.date) + @M 
    AND snow.weather = 2
WHERE rain.weather = 1

关于sql - 重新创建可能需要IN的SELECT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8840267/

相关文章:

ios - 执行插入或更新 2 个表 SQLITE 的有效方法

android - 使用 select (android sqlite) 从一个表插入到另一个表

php - 使用 join (codeigniter) 从单个字段中检索并打印逗号分隔符后的值

sql - 如何使用 VBA 从数据库中保存数百万条记录?

android - 带有动态分隔符的 ListView -数据库

sqlite - SQlite3查询:查找不属于值列表的行。优化

php - SQL查询通过PHP post方法从多列中选择数据

sql - T-SQL 按另一个表中的父键进行分组

android - 在 Android 中 moveToNext() 失败之前对 getType() 和 getColumnNames() 的 SQL 调用?

SQL 变量在 Excel 查询中不起作用