以下查询返回最近一天的事件,无论是过去还是未来:
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 列上添加索引以提高性能。