【问题标题】:select multiple rows group by date interval ( causes duplicates) [duplicate]按日期间隔选择多行分组(导致重复)[重复]
【发布时间】:2021-02-25 19:13:50
【问题描述】:

我正在尝试检索每月前 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_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)   ) 

但结果如下图所示,数据重复!并且缺少日期列

【问题讨论】:

  • 请编辑问题并显示 TRACK2.LOG2_TAB 的定义和示例数据。

标签: sql oracle sum pivot aggregate-functions


【解决方案1】:

我想你想要条件聚合:

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)

请注意,我修复了日期过滤;如果你想要整个九月,那么第二个条件应该是:&lt; date '2020-10-01'

【讨论】:

    猜你喜欢
    • 2017-06-03
    • 1970-01-01
    • 2021-12-07
    • 2016-03-23
    • 2016-09-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-07
    相关资源
    最近更新 更多