5

いくつかの値を除外する最初の行を取得するにはどうすればよいですか? row_number() over(partition by Name ORDER BY Date) を使用して注文を取得しました (以下の例を参照)。しかし、私は必要です、ランクは Type = B の最後の発生から始まります (期待される出力を参照してください)

SELECT Name, Age, Type, Date, 
       row_number() over(partition by Name ORDER BY Date) as Rank
FROM TableA;

例えば ​​:

Name   Age   Type   Date          Rank
Ben    12      A    2013/02/01    1 
Rod    14      A    2013/02/05    2
Zed    13      B    2013/03/09    3
Ken    12      A    2013/04/02    4 
Jed    14      B    2013/05/01    5
Mar    13      A    2013/05/04    6
Nic    12      A    2013/06/02    7
Jen    15      A    2013/06/09    8

期待される出力:

Name   Age    Type   Date         Rank
Mar    13      A    2013/05/04    1
Nic    12      A    2013/06/02    2
Jen    15      A    2013/06/09    3
4

4 に答える 4

0

これを試して:

SELECT Name, Age, Type, Date, 
       row_number() over(partition by Name ORDER BY Date) as Rank
FROM TableA
WHERE type <> 'B'
AND Date > (
    SELECT max(Date)
    FROM TableA
    WHERE type = 'B'
);

これは、最後の B とまったく同じ日時に A が存在しないことを前提としていることに注意してください。

于 2013-06-07T09:46:22.110 に答える