2

我正在寻找一个 SQL 查询,它从最高 Seq 为每个用户提供一个 Scr,其中 Scr 不等于 0。保证每个用户的 Seq 值都是唯一的。

样本数据:

ID Cde 用户 Scr Seq
1 1詹姆斯110 19
2 1詹姆斯85 20
3 1詹姆斯99 21
4 1詹姆斯99 22
5 1詹姆斯0 23
6 2 安德鲁 88 19
7 2安德鲁88 20
8 2 安德鲁 88 21
9 2 安德鲁 0 22
10 2 安德鲁 0 23
11 3大卫0 19
12 3 大卫 95 20
13 3 大卫 95 21
14 3 大卫 0 22
15 3 大卫 0 23

查询结果:

ID Cde 用户 Scr Seq
4 1詹姆斯99 22
8 2 安德鲁 88 21
13 3 大卫 95 21
4

4 回答 4

1
Declare @t table([ID] int, [Cde] int, [User] varchar(6), [Scr] int, [Seq] int);

INSERT INTO @t([ID], [Cde], [User], [Scr], [Seq])
VALUES
    (1, 1, 'James', 110, 19),
    (2, 1, 'James', 85, 20),
    (3, 1, 'James', 99, 21),
    (4, 1, 'James', 99, 22),
    (5, 1, 'James', 0, 23),
    (6, 2, 'Andrew', 88, 19),
    (7, 2, 'Andrew', 88, 20),
    (8, 2, 'Andrew', 88, 21),
    (9, 2, 'Andrew', 0, 22),
    (10, 2, 'Andrew', 0, 23),
    (11, 3, 'David', 0, 19),
    (12, 3, 'David', 95, 20),
    (13, 3, 'David', 95, 21),
    (14, 3, 'David', 0, 22),
    (15, 3, 'David', 0, 23);

Select [ID], [Cde], [User], [Scr], [Seq] From 
(Select Rn = Row_Number()Over(Partition By [User] Order By Seq Desc,[User]) , *
From @t 
Where Scr <> 0) x Where x.Rn = 1 Order By 5 Desc,3
于 2012-08-31T05:12:42.087 回答
1

seq您可以在子查询中找到最大的。

SELECT  a.*
FROM    tableName a INNER JOIN
        (
            SELECT [user], max(seq) MaxSeq
            FROM tablename
            WHERE Scr <> 0
            Group By [user]
        ) b 
            ON a.[user] = b.[user] AND
               a.seq = b.maxSeq
ORDER BY ID

SQLFiddle 演示

于 2012-08-31T02:11:23.380 回答
1

使用 row_number() 函数,您可以识别具有此条件的行,其中 score 不为 0 并按 seq 降序排列:

select ID, Cde, User, Scr, Seq
from (select t.*,
             row_number() over (partition by user order by seq desc) as seqnum
      from t
      where scr <> 0
     ) t
where seqnum = 1

(我假设“scr”是分数。)

于 2012-08-31T02:15:38.767 回答
0

您不需要自加入。您可以使用该功能为每个用户row_number选择最高的:seq

select ID, Cde, User, Scr, Seq from  (
   select *, row_number() over (partition by Cde order by Seq desc) rownum
   from tableName where scr <> 0
) a
where a.rownum=1

这必须通过内部查询来完成,因为row_number()仅在 中有效,在 中select无效where

于 2012-08-31T02:13:01.583 回答