我有一张订单表,其中包含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"
请注意,联合不一定很重要,但代码中需要它,因为一半的结果将被归档,但当前的归档日将导致必须使用外部查询删除日期重叠。
由于
答案 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