簡體   English   中英

按日期間隔分組 Oracle

[英]Group by date intervall Oracle

我想從整個月的表中檢索體重數據的總和。 我需要幫助的是,我想將結果分為每月 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 日的每一天都轉到fortnight1 ,之后的所有內容都轉到 bucket 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

請注意,我更改了日期過濾邏輯以使用標准日期文字,這使得查詢更短且更易讀。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM