1.oracle開展分組后,取出每組的前幾條數據:
oracle進行分組后,取出每組的前幾條數據SELECT *FROM (SELECT 分組的字段名,
ROW_NUMBER() OVER(PARTITION BY 分組的字段名 ORDER BY 排序的字段名) AS RNFROM 表名)WHERE RN <= 10
例:表mfsysevent按SKUNO分組再按SCANDATETIME排序,然后取出每個SKUNO的前十位
SELECT *FROM (SELECT SKUNO,SYSSERIALNO,
ROW_NUMBER() OVER(PARTITION BY SKUNO ORDER BY SCANDATETIME DESC) AS RN FROM MFSYSEVENT where SKUNO IN('68-4554-06','68-100328-03')
)WHERE RN <= 10

2.利用SQL語句每天都統計前面幾天的總額
原始表TTT如圖示
SELECT *FROM TTT

方法一:
select ROWNUM,ID, NUM, (select sum(NUM) from TTT B where B.id<=TTT.id) from TTT

方法二:
select A.ID, sum(B.NUM) from TTT A join TTT B on A.id>=B.id group by A.id

方法三(推薦):
SELECT ID,NUM,SUM(NUM) OVER(ORDER BY NUM)FROM TTT

對比三個方法可以看出,只有方法三沒有用欄位ID作為查詢條件,在沒有ID的情況下依然可用。
