SQLite:选择所有日期-值对,其中每个日期与第一个日期之间的距离是特定周期的倍数



我正在使用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,并且有createdvalue列。

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日期)。

最新更新