我需要编写一个查询,从今天开始计算出今天的上一天/下一天,该表中有一条记录,然后获取当天的所有行。
插入数据时,日期可能会有所不同。例如,仅仅因为它是星期二并不意味着前一天是星期一。前一天可能是星期日,星期六,甚至是上周三的星期三。
我正在试图弄清楚如何最好地选择有记录的前一天和第二天(也就是今天)。然后,在同一个查询中,获取当天的所有行。
我不知道是否有功能或其他任何东西,我很难过。我知道如何使用2个查询来完成此操作,但我想用1来完成。任何帮助都将非常感谢。
答案 0 :(得分: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
列上添加索引以提高性能。