1

私の仕事は、メンバーが現在の訪問日に図書館を何回訪問したかを把握することです。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

ランク関数を使用した以下のスクリプトがありますが、最初の訪問と最後の訪問でスタックしています。これは、このデモの1人のメンバーにすぎないことに注意してください。実際のデータには多くのメンバーが含まれています。

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 に答える