1

我的任务是计算成员在当前访问日期访问图书馆的次数。我有一个成员的以下示例记录。例如,在 2000 年 10 月 1 日 (visit_id = 55353),该成员第一次访问了该库,因此他在 2000 年 10 月 1 日之前的访问次数为 0。然后在 2000 年 12 月 15 日(visit_id = 12355),该成员再次访问了图书馆,现在他在 2012 年 12 月 15 日之前访问了 1 次。该成员于 2002 年 1 月 1 日再次访问了图书馆 (visit_id = 52524),现在他在 2002 年 1 月 1 日之前访问了 2 次。现在继续到他最近一次访问之前 2009 年 12 月 12 日 (visit_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

我在下面有一个使用 rank 函数的脚本,但我在第一次访问和最后一次访问时被卡住了。请注意,这只是此演示的一个成员。实际数据包括许多成员

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

有人可以帮忙看看吗?是否有其他功能、案例陈述或修改排名功能以使其工作?

4

3 回答 3

1

你试过只减去1吗?

SELECT
DATE_VISIT,
RANK() OVER (PARTITION BY MEMBER_ID ORDER BY DATE_VISIT) -1  AS Rank
FROM RANKS
于 2013-01-12T23:02:38.737 回答
0
Select
  Date_Visit,
  Rank - 1
From (    
  Select
    Date_Visit,
    Rank() Over (Partition By Member_Id Order By Date_Visit) AS Rank
   From
     Ranks
  ) x
于 2013-01-12T23:00:49.617 回答
0

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

SELECT DATE_VISIT, (Rnk - 1) NewRnk FROM (
SELECT
DATE_VISIT,
RANK() OVER (PARTITION BY MEMBER_ID ORDER BY DATE_VISIT) AS Rnk
FROM RANKS
)
于 2013-01-12T23:00:49.920 回答