sql - 查询中按周/按月/按季度分组

标签 sql oracle time grouping

假设我有包含以下列的表格

1. Client - string.
2. Profit - integer.
3. Deal_Date - date.

我需要查询来检索按周/月/季度等划分的利润明细总额。

几周的预期产出

1 row, sum (profit) of all deals that registered from (03.19.2012 - 03.12.2012).
2 row, sum (profit) of all deals that registered from (03.12.2012 - 03.05.2012).
...
n row, sum (profit) of all deals that registered from (05.17.2011 - 05.10.2011).

注意(日期设置仅供引用)

月份、年份等相同。

有人可以帮我解决这样的问题吗?

顺便说一句,性能非常重要。

最佳答案

此查询使用简单的日期格式来提取您想要跟踪和分析的各种元素以获取总和。

select client
       , yr
       , qtr
       , wk
       , sum ( profit ) over ( partition by client, yr) as yr_profit
       , sum ( profit ) over ( partition by client, yr, qtr) as qtr_profit
       , sum ( profit ) over ( partition by client, yr, wk) as wk_profit
from ( 
         select client
                , profit
                , to_char(deal_date, 'yyyy') as yr
                , to_char(deal_date, 'q') as qt
                , to_char(deal_date, 'ww') as wk
          from your_table )
/

这将为当前表中的每一行生成一行。因此,您可能希望将其包装在仅返回不同行的进一步外部查询中。

一种变体是使用汇总。我不确定当分组标准不完全分层时效果如何(周不能完全适合季度)。

select client
       , yr
       , qtr
       , wk
       , sum ( profit ) as profit
from ( 
         select client
                , profit
                , to_char(deal_date, 'yyyy') as yr
                , to_char(deal_date, 'q') as qt
                , to_char(deal_date, 'ww') as wk
          from your_table )
group by rollup ( client, yr, qtr, wk )
/

关于sql - 查询中按周/按月/按季度分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9769127/

相关文章:

php - 如何以时间格式对 N 个值求和 (hh :mm:ss)?

sql - 在mysql中过滤一个组

php - Doctrine 不创建自动 UUID

java - 将android SQLite文本内容转储到textView中

mysql - SQL如何删除不正确的重复(不正确)值?

database - Oracle中如何查看表的哪一列被授予了用户

database - 系统表上的 Oracle 闪回

c - struct tm 的替代方案

linux - 定期更新虚拟机时间

python - 具有多对多字段的 Django 条件排序