按日期间隔选择多行分组(导致重复)[重复]
Posted
技术标签:
【中文标题】按日期间隔选择多行分组(导致重复)[重复]【英文标题】: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 的定义和示例数据。 【参考方案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)
请注意,我修复了日期过滤;如果你想要整个九月,那么第二个条件应该是:< date '2020-10-01'
。
【讨论】:
以上是关于按日期间隔选择多行分组(导致重复)[重复]的主要内容,如果未能解决你的问题,请参考以下文章