Sql 按日期间隔选择多行分组(导致重复)
我试图检索一个月前15天和该月后15天的体重数据。 如下表所示 这是我的密码Sql 按日期间隔选择多行分组(导致重复),sql,oracle,sum,pivot,aggregate-functions,Sql,Oracle,Sum,Pivot,Aggregate Functions,我试图检索一个月前15天和该月后15天的体重数据。 如下表所示 这是我的密码 SELECT * from ( select SUM(B.SCALE_WEIGHT) as Mtrl1 FROM TRACK2.LOG2_TAB B where B.SCALE_EVENTDATE >= date '2020-09-01' and B.SCALE_EVENTDATE < date '2020-09-30' AND B.Scale_EVENTDATE = B.SCALE_EVEN
SELECT * from
( select SUM(B.SCALE_WEIGHT) as Mtrl1 FROM TRACK2.LOG2_TAB B
where B.SCALE_EVENTDATE >= date '2020-09-01'
and B.SCALE_EVENTDATE < date '2020-09-30'
AND B.Scale_EVENTDATE = B.SCALE_EVENTDATE
and MTRLID_EXT = 206
group by floor(extract(day from SCALE_EVENTDATE)/16) ) ,
( select SUM(B.SCALE_WEIGHT) as Mtrl2 FROM TRACK2.LOG2_TAB B
where B.SCALE_EVENTDATE >= date '2020-09-01'
and B.SCALE_EVENTDATE < date '2020-09-30'
AND B.Scale_EVENTDATE = B.SCALE_EVENTDATE
and MTRLID_EXT = 211
group by floor(extract(day from SCALE_EVENTDATE)/16) )
但结果如下图所示,数据重复!和缺少日期列
我认为您需要条件聚合:
select
floor(extract(day from scale_eventdate)/16) as fortnight,
sum(case when mtrlid_ext = 206 then scale_weight else 0 end) as mtrl1,
sum(case when mtrlid_ext = 211 then scale_weight else 0 end) as mtrl2
from track2.log2_tab
where
mtrlid_ext in (206, 211)
and scale_eventdate >= date '2020-09-01'
and scale_eventdate < date '2020-10-01'
group by floor(extract(day from scale_eventdate) / 16)
注意,我固定了日期过滤;如果您想要整个9月份,那么第二个条件应该是: