给定具有以下两列的表
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/