我需要编写一个查询,从今天开始计算前一天/后一天在表中有记录,然后获取当天的所有行。
插入数据时,日期可能会有所不同。例如,仅仅因为它是星期二并不意味着前一天是星期一。前一天可能是上周的星期日、星期六,甚至是星期三。
我试图弄清楚如何最好地选择有记录的前一天和第二天(不是今天)。然后,在同一个查询中,获取当天的所有行。
我不知道这是否有功能或任何东西,我很困惑。我知道如何用 2 个查询来做到这一点,但我想用 1 来做到这一点。任何帮助将不胜感激。
以下查询返回最近一天的事件,无论是过去还是未来:
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
列上添加索引以提高性能。