首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >oracle窗口函数

oracle窗口函数
EN

Stack Overflow用户
提问于 2015-05-12 01:25:19
回答 1查看 250关注 0票数 0

有没有人能帮我解决这个问题:

代码语言:javascript
复制
SELECT SUM(summa), name, 
       TO_CHAR(invoice_date, 'YYYY/mm') 
           OVER (PARTITON EXTRACT(MONTH FROM i.invoice_date, c.name) 
FROM invoice i, customer c 
WHERE i.customer_id = c.id
AND months_between(sysdate, invoice_date) = 3
AND rownum < 11 GROUP BY invoice_date, name
ORDER BY SUM(SUMMA) DESC;

假设获取过去三个月的前十行,按月份分组并按总和排序。

谢谢。

EN

回答 1

Stack Overflow用户

发布于 2015-05-12 02:20:37

首先,使用适当的显式join语法。其次,您需要row_number()

代码语言:javascript
复制
SELECT t.*
FROM (SELECT SUM(summa) as sumsumma, name, 
             TO_CHAR(invoice_date, 'YYYY/mm') as yyyymm,
             ROW_NUMBER() OVER (PARTITION BY TO_CHAR(invoice_date, 'YYYY/mm')
                                ORDER BY SUM(summa) DESC
                               ) as seqnum
      FROM invoice i JOIN
           customer c 
           ON i.customer_id = c.id
      WHERE months_between(sysdate, invoice_date) = 3
      GROUP BY invoice_date, name
     ) t
WHERE seqnum <= 10
ORDER BY sumsumma DESC;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30173943

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档