row_number()分析函数的奇怪行为

时间:2012-08-26 14:35:24

标签: sql oracle plsql

希望有人可以在这里指出我正确的方向。

见下面的查询。

SELECT day_id,month_id,time_id,
row_number() over (partition BY month_id order by day_id ) rn
FROM minute_bars_fact order by month_id, day_Id, time_id

产生输出:

DAY_ID      MONTH_ID    Time_id rn
02-JAN-11   JAN-2011    1080    1
02-JAN-11   JAN-2011    1081    2
02-JAN-11   JAN-2011    1082    3
02-JAN-11   JAN-2011    1083    4
02-JAN-11   JAN-2011    1084    5
02-JAN-11   JAN-2011    1085    6
02-JAN-11   JAN-2011    1086    7
02-JAN-11   JAN-2011    1087    8

我的期望是,每次新的一天只会增加。显然事实并非如此。我在这里做错了吗?

编辑:

日子并不总是一样。

02-JAN-11   JAN-2011    1436    357
02-JAN-11   JAN-2011    1437    358
02-JAN-11   JAN-2011    1438    359
02-JAN-11   JAN-2011    1439    360
03-JAN-11   JAN-2011    0   361
03-JAN-11   JAN-2011    1   362
03-JAN-11   JAN-2011    2   363
03-JAN-11   JAN-2011    3   364

1 个答案:

答案 0 :(得分:4)

  

我的期望是,每次新的一天只会增加。

不,这是不正确的。您需要使用RANKDENSE_RANK来实现此行为。不是ROW_NUMBER