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来确定。