查询根据时间减去时间来选择行

Posted

技术标签:

【中文标题】查询根据时间减去时间来选择行【英文标题】:Query to select rows based on time minus time 【发布时间】:2022-01-18 01:13:25 【问题描述】:

我想在 oracle 11g R2 上构建一个查询,我有下表:

我们以第一行为例:第一行 F11 是下午 1 点,T11 是下午 3 点,下午 1 点和下午 3 点之间的差是 120 分钟,我有一个变量 X,假设 X=10,什么我想要创建一个查询来选择下午 1 点到 3 点之间的行除以 X ,所以我应该有 12 行。

【问题讨论】:

12行什么 【参考方案1】:

认为这是您正在寻找的分层查询。这 12 行将代表 f11(开始时间)加上 120 分钟除以 x 值(即 10)所以 - 那是 12 分钟。

如果是这样,那就去吧:

SQL> var x number;
SQL> exec :x := 10;

PL/SQL procedure successfully completed.

SQL> alter session set nls_date_format = 'dd.mm.yyyy hh24:Mi:ss';

Session altered.

SQL> with test (id, f11, t11) as
  2    (select 1,
  3            to_date('28.03.2022 01:00', 'dd.mm.yyyy hh24:mi'),
  4            to_date('28.03.2022 03:00', 'dd.mm.yyyy hh24:mi')
  5     from dual union all
  6     --
  7     select 2,
  8            to_date('29.11.2021 01:00', 'dd.mm.yyyy hh24:mi'),
  9            to_date('29.11.2021 01:30', 'dd.mm.yyyy hh24:mi')
 10     from dual
 11    ),
 12  temp as
 13    (select id, f11, (t11 - f11) * (24 * 60) diff
 14     from test
 15    )
 16  select id,
 17    f11 + (diff / :x) / (24 * 60) * (column_value - 1) val
 18  from temp
 19  cross join table(cast(multiset(select level from dual
 20                                 connect by level <= diff / :x
 21                                ) as sys.odcinumberlist))
 22  order by id, val;

        ID VAL
---------- -------------------
         1 28.03.2022 01:00:00
         1 28.03.2022 01:12:00
         1 28.03.2022 01:24:00
         1 28.03.2022 01:36:00
         1 28.03.2022 01:48:00
         1 28.03.2022 02:00:00
         1 28.03.2022 02:12:00
         1 28.03.2022 02:24:00
         1 28.03.2022 02:36:00
         1 28.03.2022 02:48:00
         1 28.03.2022 03:00:00
         1 28.03.2022 03:12:00
         2 29.11.2021 01:00:00
         2 29.11.2021 01:03:00
         2 29.11.2021 01:06:00

15 rows selected.

SQL>

【讨论】:

不客气。

以上是关于查询根据时间减去时间来选择行的主要内容,如果未能解决你的问题,请参考以下文章

根据某些查询参数的存在选择服务器块

如何根据oracle plsql中列中的逗号分隔值拆分选择查询行

sql查询选择table1的总和和table2的总和并减去它们

当必须根据条件对记录进行分组时如何选择最多 x 行

在 MySQL 中给定特定条件选择“下一个”行

根据 3 到 4 个条件对数据库表中的行进行计数和分组查询