按日期区间分组 Oracle
Group by date intervall Oracle
我想从 table 中检索整个月的体重数据总和。
我需要帮助的是我想将结果分为两部分
当月 1-15 的总和
和本月的第 16-31 行。
SELECT(SUM(B.SCALE_WEIGHT) FROM TRACKING.DATALOG_TAB B WHERE B.MATERIALID= 1 AND B.SCALE_EVENTDATE BETWEEN TO_DATE(TRUNC(TO_DATE('2020-10-1', 'YYYY-MM-DD'),'MONTH')) AND TO_DATE(TRUNC(TO_DATE('2020-10-1', 'YYYY-MM-DD'), 'MONTH')+30)
GROUP BY(somthing like this - 1-15 and 16-31)
这是一个选项:
select
1 + floor(extract(day from scale_eventdate) / 16) as fortnight,
sum(b.scale_weight) as sum_scale_weight
from tracking.datalog_tab b
where
materialid = 1
and scale_eventdate >= date '2020-10-01'
and scale_eventdate < date '2020-11-01'
group by 1 + floor(extract(day from scale_eventdate) / 16)
这从日期中提取天数,然后使用算法:从包含的月份的 1 号到 15 号的每一天都转到 fortnight
号 1
,然后所有内容都转到到桶 2
.
我们也可以用 to_char()
和一个 case
表达式来做到这一点,它更具表现力:
select
case when to_char(scale_eventdate, 'dd') <= '15' then 1 else 2 end as fortnight,
sum(b.scale_weight) as sum_scale_weight
from tracking.datalog_tab b
where
materialid = 1
and scale_eventdate >= date '2020-10-01'
and scale_eventdate < date '2020-11-01'
group by case when to_char(scale_eventdate, 'dd') <= '15' then 1 else 2 end
请注意,我更改了日期过滤逻辑以使用标准日期文字,这使得查询更短且更易读。
我想从 table 中检索整个月的体重数据总和。 我需要帮助的是我想将结果分为两部分 当月 1-15 的总和 和本月的第 16-31 行。
SELECT(SUM(B.SCALE_WEIGHT) FROM TRACKING.DATALOG_TAB B WHERE B.MATERIALID= 1 AND B.SCALE_EVENTDATE BETWEEN TO_DATE(TRUNC(TO_DATE('2020-10-1', 'YYYY-MM-DD'),'MONTH')) AND TO_DATE(TRUNC(TO_DATE('2020-10-1', 'YYYY-MM-DD'), 'MONTH')+30)
GROUP BY(somthing like this - 1-15 and 16-31)
这是一个选项:
select
1 + floor(extract(day from scale_eventdate) / 16) as fortnight,
sum(b.scale_weight) as sum_scale_weight
from tracking.datalog_tab b
where
materialid = 1
and scale_eventdate >= date '2020-10-01'
and scale_eventdate < date '2020-11-01'
group by 1 + floor(extract(day from scale_eventdate) / 16)
这从日期中提取天数,然后使用算法:从包含的月份的 1 号到 15 号的每一天都转到 fortnight
号 1
,然后所有内容都转到到桶 2
.
我们也可以用 to_char()
和一个 case
表达式来做到这一点,它更具表现力:
select
case when to_char(scale_eventdate, 'dd') <= '15' then 1 else 2 end as fortnight,
sum(b.scale_weight) as sum_scale_weight
from tracking.datalog_tab b
where
materialid = 1
and scale_eventdate >= date '2020-10-01'
and scale_eventdate < date '2020-11-01'
group by case when to_char(scale_eventdate, 'dd') <= '15' then 1 else 2 end
请注意,我更改了日期过滤逻辑以使用标准日期文字,这使得查询更短且更易读。