【问题标题】:Selecting the previous day via SQLite通过 SQLite 选择前一天
【发布时间】:2013-01-12 23:34:20
【问题描述】:

我需要编写一个查询来计算从今天开始的前一天/后一天在表中有一条记录,然后获取当天的所有行。

插入数据时,日期可能会有所不同。例如,仅仅因为它是星期二并不意味着前一天是星期一。前一天可能是上周的星期日、星期六,甚至是星期三。

我正试图弄清楚如何最好地选择有记录的前一天和第二天(不是今天)。然后,在同一个查询中,获取当天的所有行。

我不知道这是否有功能或任何东西,我很困惑。我知道如何用 2 个查询来做到这一点,但我想用 1 个来做到这一点。任何帮助将不胜感激。

【问题讨论】:

  • 所以你不需要前一天和后一天。您需要最近的一天,在今天之前或之后

标签: sqlite date time


【解决方案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 BYLIMIT 1 结合使用可以解决问题。使用&gt; 表示最近的将来,使用&lt; 表示最近的过去(并颠倒排序)。您可能希望在 schedule 列上添加索引以提高性能。

【讨论】:

  • 那只会得到 1 条记录,我想获取最近一天的所有记录,而不是今天。
  • @scarhand 所以只需在WHERE 子句中使用它
猜你喜欢
  • 2013-01-23
  • 2018-12-11
  • 2021-12-29
  • 1970-01-01
  • 2011-06-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多