通过SQLite选择前一天

时间:2013-01-12 08:55:45

标签: sqlite date time

我需要编写一个查询,从今天开始计算出今天的上一天/下一天,该表中有一条记录,然后获取当天的所有行。

插入数据时,日期可能会有所不同。例如,仅仅因为它是星期二并不意味着前一天是星期一。前一天可能是星期日,星期六,甚至是上周三的星期三。

我正在试图弄清楚如何最好地选择有记录的前一天和第二天(也就是今天)。然后,在同一个查询中,获取当天的所有行。

我不知道是否有功能或其他任何东西,我很难过。我知道如何使用2个查询来完成此操作,但我想用1来完成。任何帮助都将非常感谢。

1 个答案:

答案 0 :(得分:0)

以下查询会在过去或将来的最近一天返回事件:

select 'Nearest in the future';

select * from job where schedule = (
  select schedule from job where schedule > date('now')
         order by schedule limit 1
);

select 'Nearest in the past';

select * from job where schedule = (
  select schedule from job where schedule < date('now')
         order by schedule desc limit 1
);

给出样本架构:

create table if not exists job (
  id integer primary key not null,
  name text,
  schedule text
);

insert into job (name, schedule) values ( 'foo', date('now', '+32 days') );
insert into job (name, schedule) values ( 'bar', date('now', '+12 days') );
insert into job (name, schedule) values ( 'baz', date('now', '+12 days') );
insert into job (name, schedule) values ( 'woo', date('now', '+55 days') );
insert into job (name, schedule) values ( 'qoo', date('now', '-32 days') );
insert into job (name, schedule) values ( 'bzz', date('now', '-18 days') );
insert into job (name, schedule) values ( 'frr', date('now', '-18 days') );
insert into job (name, schedule) values ( 'trr', date('now', '-55 days') );

ORDER BYLIMIT 1相结合可以解决问题。将>用于将来最近的,<用于过去最近的(并反转排序)。您可能希望在schedule列上添加索引以提高性能。