Sql 具有row_number()分析函数的奇数行为

Sql 具有row_number()分析函数的奇数行为,sql,oracle,plsql,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

希望有人能给我指出正确的方向

请参见下面的查询

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
我在这里的期望是,rn只会在新的一天增加。显然情况并非如此。我做错什么了吗

编辑:

日子不总是一样的

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
我在这里的期望是,rn只会在新的一天增加

不,这是不正确的。您需要使用秩或密秩来实现此行为。不是排号

我在这里的期望是,rn只会在新的一天增加


不,这是不正确的。您需要使用秩或密秩来实现此行为。不是行号

因为每个分区的每个月和行号都相同,所以此行为是正确的。我想您可能正在寻找rank函数,如果日期相同,它将返回相同的数字。因为每个分区都有相同的月份和行数,所以这种行为是正确的。我想您可能正在寻找rank函数,如果日期相同,它将返回相同的数字。前提是day_ID不包含时间组件,如sqlfiddle中的时间组件。最好使用truncday\u id来确定。只有当DAY\u id不包含时间组件时,比如在SQLFIDLE中。最好使用truncday\u id来确定。