Oracle 9i Group按偏移日期时间

时间:2015-12-07 10:48:34

标签: sql oracle

我有一张订单表,其中包含create_date_time(即 - 02/12/2015 14:00:44)

我想要做的是通过此create_date_time对两个月的订单进行分组,但不是使用trunc并使用正确的一天,我想从早上6点到早上6点。我在下面尝试了这个,但它似乎没有那样工作,而是截断然后改变create_date_time。

select "Date", sum(CFS), sum(MCR) from
(select trunc(phi.create_date_Time)+6/24 as "Date",
        case when pkt_sfx = 'CFS' then sum(total_nbr_of_units)
        End as CFS,
        case when pkt_sfx <> 'CFS' then sum(total_nbr_of_units)
        end as MCR
 from pkt_hdr ph
   inner join pkt_hdr_intrnl phi
     on phi.pkt_ctrl_nbr = ph.pkt_ctrl_nbr
 where sale_grp = 'I'
 group by trunc(phi.create_date_time)+6/24, pkt_sfx
 union
 select trunc(phi.create_date_Time)+6/24 as "Date",
        case when pkt_sfx = 'CFS' then sum(total_nbr_of_units)
        End as CFS,
        case when pkt_sfx <> 'CFS' then sum(total_nbr_of_units)
        end as MCR
 from wm_archive.pkt_hdr ph
   inner join wm_archive.pkt_hdr_intrnl PHI
     on phi.pkt_Ctrl_nbr = ph.pkt_ctrl_nbr
 where sale_grp = 'I'
   and trunc(phi.create_date_time) >= trunc(sysdate)-60
 group by trunc(phi.create_date_time)+6/24, pkt_sfx
)
group by "Date"

请注意,联合不一定很重要,但代码中需要它,因为一半的结果将被归档,但当前的归档日将导致必须使用外部查询删除日期重叠。

由于

2 个答案:

答案 0 :(得分:1)

只需交换TRUNC的顺序并添加6h - 而不是

select trunc(phi.create_date_Time)+6/24 as "Date"

使用

select trunc(phi.create_date_Time + 6/24) as "Date"

(您还需要更改其他出现的trunc()

BTW:我在&#34;日期&#34;中使用了另一个名字。 column - DATE是一种SQL数据类型,因此有一个名为&#34; Date&#34;的列。有点混乱。

答案 1 :(得分:1)

如果我理解正确,你需要从日期减去六个小时,然后截断这个日期:

select trunc(dt-6/24) dt, sum(units) u 
  from ( select dt, units from t1 union all
         select dt, units from t2 )
  group by trunc(dt-6/24)

测试:

create table t1 (dt date, units number(5));
insert into t1 values (timestamp '2015-12-01 12:47:00', 7);
insert into t1 values (timestamp '2015-12-01 23:47:00', 7);

create table t2 (dt date, units number(5));
insert into t2 values (timestamp '2015-12-02 05:47:00', 7);
insert into t2 values (timestamp '2015-12-02 14:47:00', 7);

输出:

Dt          U
----------  ---
2015-12-01   21
2015-12-02    7