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 に答える