根据时间减去时间查询 select 行

Query to select rows based on time minus time

我想在 oracle 11g R2 上构建查询,我有以下 table:

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

认为这是您正在寻找的分层查询。这 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>