按日期间隔选择多行分组(导致重复)[重复]

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)

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

【讨论】:

以上是关于按日期间隔选择多行分组(导致重复)[重复]的主要内容,如果未能解决你的问题,请参考以下文章

使用 JPA 的 Criteria API 按日期间隔分组

Eloquent - 按“从日期”到“至今”分组,间隔为 1 天

按日期间隔分组 Oracle

SQL查询中按日期、天间隔分组

在特定时间间隔重复警报

按 10 分钟间隔对 pandas DataFrame 进行分组[重复]