我正在使用SQLite和Python,并试图获得这些特定的日期(和相应的值)。我想一个例子能最好地解释我在寻找什么。考虑从这些数据中进行选择:
-(2011-01-02, 4.0)
-(2011-01-14, 5.0)
-(2011-02-02, 5.5)
-(2011-02-07, 6.5)
-(2011-02-12, 7.0)
-(2011-02-15, 4.0)
-(2011-03-02, 2.5)
-(2011-03-09, 3.5)
在第一个日期和我们要查找的所有日期之间,周期距离为一个月(或倍数)的返回如下数据:
-(2011-01-02, 4.0)
-(2011-02-02, 5.5)
-(2011-03-02, 2.5)
我正在寻找一个sql语句,它为我提供了这些数据,如果可能的话。
附加问题:如果没有日期点恰好是一个月的倍数从初始日期,我怎么能得到最近的日期在我的数据库中?
我希望我的解释足够清楚。如果没有,谢谢你告诉我。听起来这不是一个足够灵活的解决方案,但为了直接回答你的问题,这里有一个查询,可以得到你所需要的。
另外,由于您没有指定表/列名,我使用的测试表称为foo
,并且有created
和value
列。
select
foo.created, foo.value
from
-- Subquery to pick first record to base rest of query on
(
select
created,
strftime('%d', created) as day
from
foo
order by
created
limit 1
) as bar
-- Join all rows in foo that are greater than that found in 'bar'
-- and has the same day of the month.
join foo
on foo.created >= bar.created
and strftime('%d', foo.created) = bar.day
结果:
2011-01-02|4.0
2011-02-02|5.5
2011-03-02|2.5
注意 -这可能是相当低效的,由于所有的strftime
正在完成(我假设没有索引可以在这里使用)。
注2 -此查询不处理恰好一个月以外的时间间隔,如果两个记录具有相同的日期,或者识别数据中的空白(例如:如果2011-02-02
日期缺失,它仍然会返回2011-03-02
日期)。