我的任务是弄清楚成员访问了多少次 在当前访问日期的图书馆。我有以下内容 一个成员的示例记录。例如,在2000年10月1日 (visit_id = 55353)这位成员第一次访问了图书馆, 所以他在2000年10月1日之前有0次访问。然后在2000年12月15日(visit_id = 12355) 这位成员再次访问了图书馆,现在他在12/15/2012之前有一次访问。 该成员再次于01/01/2002(visit_id = 52524)访问了该图书馆 现在他在2002年1月1日之前进行了2次访问。现在继续他最近的访问 访问12/12/2009(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
我在下面有一个使用等级函数的脚本,但我被困在第一个 访问和上次访问。请注意,这只是一个成员 示范。实际数据包括许多成员。
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
有谁可以请一看并帮忙?还有其他功能,案例陈述或 修改排名功能使其有效?
答案 0 :(得分:1)
你试过减去1吗?
SELECT
DATE_VISIT,
RANK() OVER (PARTITION BY MEMBER_ID ORDER BY DATE_VISIT) -1 AS Rank
FROM RANKS
答案 1 :(得分: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
答案 2 :(得分: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
)