Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL中的秩函数_Sql - Fatal编程技术网

SQL中的秩函数

SQL中的秩函数,sql,Sql,我的任务是计算成员访问了多少次 当前访问日期的图书馆。我有以下几点 一个成员的示例记录。例如,2000年1月10日 (访问id=55353)这位成员第一次访问了图书馆, 因此,在2000年1月10日之前,他有0次访问。然后在2000年12月15日(访问id=12355) 该成员再次访问了图书馆,现在他在2012年12月15日之前有1次访问。 该成员于2002年1月1日再次访问了图书馆(访问id=52524),并 现在,他在2002年1月1日之前有两次访问。现在,在最近一次访问之前,继续访问 访问

我的任务是计算成员访问了多少次 当前访问日期的图书馆。我有以下几点 一个成员的示例记录。例如,2000年1月10日 (访问id=55353)这位成员第一次访问了图书馆, 因此,在2000年1月10日之前,他有0次访问。然后在2000年12月15日(访问id=12355) 该成员再次访问了图书馆,现在他在2012年12月15日之前有1次访问。 该成员于2002年1月1日再次访问了图书馆(访问id=52524),并 现在,他在2002年1月1日之前有两次访问。现在,在最近一次访问之前,继续访问 访问12/12/2009(访问id=45254)该成员有9次访问图书馆

Member_ID   Date_Visit  Visit_id
12345       2000-10-01  55353
12345       2000-12-15  12355
12345       2002-01-01  52524
12345       2002-01-02  62558
12345       2003-05-30  22287
12345       2003-08-12  82552
12345       2003-09-12  12563
12345       2005-11-25  78785
12345       2008-12-25  98212
12345       2009-12-12  45254
我有一个脚本下面使用排名函数,但我被困在第一 访问和最后一次访问。请注意,这只是一个成员 示范。实际数据包括许多成员

SELECT
DATE_VISIT,
RANK() OVER (PARTITION BY MEMBER_ID ORDER BY DATE_VISIT) AS Rank
FROM RANKS

DATE_VISIT  Rank
2000-10-01  1
2000-12-15  2
2002-01-01  3
2002-01-02  4
2003-05-30  5
2003-08-12  6
2003-09-12  7
2005-11-25  8
2008-12-25  9
2009-12-12  10
我希望我的输出如下:

DATE_VISIT  Rank
2000-10-01  0
2000-12-15  1
2002-01-01  2
2002-01-02  3
2003-05-30  4
2003-08-12  5
2003-09-12  6
2005-11-25  7
2008-12-25  8
2009-12-12  9
谁能帮我看看吗?是否有其他功能、案例陈述或
修改秩函数使其工作?

您可以尝试以下操作,也可以为秩列使用不同的别名

Select
  Date_Visit,
  Rank - 1
From (    
  Select
    Date_Visit,
    Rank() Over (Partition By Member_Id Order By Date_Visit) AS Rank
   From
     Ranks
  ) x
SELECT DATE_VISIT, (Rnk - 1) NewRnk FROM (
SELECT
DATE_VISIT,
RANK() OVER (PARTITION BY MEMBER_ID ORDER BY DATE_VISIT) AS Rnk
FROM RANKS
)

您可以尝试以下操作,也可以为列组使用不同的别名

SELECT DATE_VISIT, (Rnk - 1) NewRnk FROM (
SELECT
DATE_VISIT,
RANK() OVER (PARTITION BY MEMBER_ID ORDER BY DATE_VISIT) AS Rnk
FROM RANKS
)

你试过只减去1吗

SELECT
DATE_VISIT,
RANK() OVER (PARTITION BY MEMBER_ID ORDER BY DATE_VISIT) -1  AS Rank
FROM RANKS

你试过只减去1吗

SELECT
DATE_VISIT,
RANK() OVER (PARTITION BY MEMBER_ID ORDER BY DATE_VISIT) -1  AS Rank
FROM RANKS

. . 你一定很累了。从计算中减去“1”通常不被认为是一个困难的问题。你得到了最难的部分,那就是理解
rank
函数。谢谢。我不打算从计算中减去1。只是给我带来问题的语法。谢谢你一定很累了。从计算中减去“1”通常不被认为是一个困难的问题。你得到了最难的部分,那就是理解
rank
函数。谢谢。我不打算从计算中减去1。只是给我带来问题的语法。谢谢