我正在使用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语句,如果可能的话,它会向我提供这些数据。
其他问题: 如果没有与初始日期完全相差一个月的日期点,我怎样才能在我的数据库中获得最近的日期?
我希望我的解释足够清楚。如果没有,谢谢你说。
答案 0 :(得分:1)
听起来这对于您的需求来说不是一个足够灵活的解决方案,但是直接回答您的问题,这是一个可以满足您需求的查询。
此外,由于您没有指定表/列名称,因此我使用的测试表名为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
日期。