次のクエリは、過去または将来の最も近い日のイベントを返します。
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
パフォーマンスを向上させるために、列にインデックスを追加することができます。