PostgreSQL窗口函数:行数()超过(按col2划分col顺序)

PostgreSQL窗口函数:行数()超过(按col2划分col顺序),sql,postgresql,window-functions,row-number,Sql,Postgresql,Window Functions,Row Number,下面的结果集是从一个sql查询中派生出来的,该查询包含几个连接和一个并集。sql查询已按日期和游戏对行进行分组。我需要一个列来描述一个按日期划分的游戏的尝试次数 Username Game ID Date johndoe1 Game_1 100 7/22/14 1:52 AM johndoe1 Game_1 100 7/22/14 1:52 AM johndoe1 Game_1 100 7/22/14 1:52 AM johndoe1 Game

下面的结果集是从一个sql查询中派生出来的,该查询包含几个连接和一个并集。sql查询已按日期和游戏对行进行分组。我需要一个列来描述一个按日期划分的游戏的尝试次数

Username   Game     ID   Date

johndoe1   Game_1   100  7/22/14 1:52 AM
johndoe1   Game_1   100  7/22/14 1:52 AM
johndoe1   Game_1   100  7/22/14 1:52 AM
johndoe1   Game_1   100  7/22/14 1:52 AM
johndoe1   Game_1   121  7/22/14 1:56 AM
johndoe1   Game_1   121  7/22/14 1:56 AM
johndoe1   Game_1   121  7/22/14 1:56 AM
johndoe1   Game_1   121  7/22/14 1:56 AM
johndoe1   Game_1   121  7/22/14 1:56 AM
johndoe1   Game_1   130  7/22/14 1:59 AM
johndoe1   Game_1   130  7/22/14 1:59 AM
johndoe1   Game_1   130  7/22/14 1:59 AM
johndoe1   Game_1   130  7/22/14 1:59 AM
johndoe1   Game_1   130  7/22/14 1:59 AM
johndoe1   Game_1   200  7/22/14 2:54 AM
johndoe1   Game_1   200  7/22/14 2:54 AM
johndoe1   Game_1   200  7/22/14 2:54 AM
johndoe1   Game_1   200  7/22/14 2:54 AM
johndoe1   Game_1   210  7/22/14 3:54 AM
johndoe1   Game_1   210  7/22/14 3:54 AM
johndoe1   Game_1   210  7/22/14 3:54 AM
johndoe1   Game_1   210  7/22/14 3:54 AM
下面的sql查询枚举了分区内的行,但并不完全正确,因为我需要基于日期和游戏的游戏实例计数。在这种情况下,johndoe1曾五次尝试在游戏1中按时间戳进行分区

此查询返回下面的结果集

select *
, row_number() over (partition by ct."date" order by ct."date") as "Attempts"
from csv_temp as ct

Username   Game     ID   Date             Attempts  (Desired Attempts col.)

johndoe1   Game_1   100  7/22/14 1:52 AM  1          1
johndoe1   Game_1   100  7/22/14 1:52 AM  2          1
johndoe1   Game_1   100  7/22/14 1:52 AM  3          1
johndoe1   Game_1   100  7/22/14 1:52 AM  4          1
johndoe1   Game_1   121  7/22/14 1:56 AM  1          2
johndoe1   Game_1   121  7/22/14 1:56 AM  2          2
johndoe1   Game_1   121  7/22/14 1:56 AM  3          2
johndoe1   Game_1   121  7/22/14 1:56 AM  4          2
johndoe1   Game_1   121  7/22/14 1:56 AM  5          2
johndoe1   Game_1   130  7/22/14 1:59 AM  1          3   
johndoe1   Game_1   130  7/22/14 1:59 AM  2          3
johndoe1   Game_1   130  7/22/14 1:59 AM  3          3
johndoe1   Game_1   130  7/22/14 1:59 AM  4          3
johndoe1   Game_1   130  7/22/14 1:59 AM  5          3
johndoe1   Game_1   200  7/22/14 2:54 AM  1          4
johndoe1   Game_1   200  7/22/14 2:54 AM  2          4
johndoe1   Game_1   200  7/22/14 2:54 AM  3          4
johndoe1   Game_1   200  7/22/14 2:54 AM  4          4
johndoe1   Game_1   210  7/22/14 3:54 AM  1          5
johndoe1   Game_1   210  7/22/14 3:54 AM  2          5
johndoe1   Game_1   210  7/22/14 3:54 AM  3          5
johndoe1   Game_1   210  7/22/14 3:54 AM  4          5

任何指针都会有很大帮助。

请考虑
分区依据
分组依据
的字段类似,然后,当分区值更改时,窗口功能将在1重新启动

编辑 如一匹没有名字的马所示,为了满足这一需要,我们需要
densite\u rank()
row\u number()
rank()
densed\u rank()
不同,重复分配的数字
row_number()
对于分区中的每一行必须是不同的值。
rank()
densite\u rank()
之间的区别在于后者不会“跳过”数字

对于您的查询,请尝试:

dense_rank() over (partition by Username, Game order by ct."date") as "Attempts"

顺便说一下,您不需要按同一字段进行分区和排序;如果需要的话,只需订购即可。它不在这里。

也许这将有助于查看所需的结果,
(所需尝试列)
组中的行之间的唯一区别是
尝试列。也许您可以按
用户名、游戏、ID
分组,添加
计数(1)
以获取尝试次数,并添加
行数()
以获取
(所需的尝试列)
?在示例中,只有一种用户名/游戏的组合,每行在语句中都会获得不同的行数(行数()从不生成重复的数字)。应该是
density\u rank()(按用户名划分,按ct.“date”划分游戏顺序)
@a\u horse\u和\u no\u name哦,亲爱的,非常正确-我专注于划分;谢谢。我没有足够的创造力去想象“partitionby”子句可以接受多个列,而且我的分区也不正确。谢谢你们两个!这项功能什么时候出现在postgres上的?它相对较新吗?