0

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

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

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

我不知道这是否有功能或任何东西,我很困惑。我知道如何用 2 个查询来做到这一点,但我想用 1 来做到这一点。任何帮助将不胜感激。

4

1 回答 1

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 BY结合使用LIMIT 1就可以了。用于>最近的将来和<最近的过去(并颠倒排序)。您可能希望在schedule列上添加索引以提高性能。

于 2013-01-12T09:03:48.960 回答