sql只从最近的多条记录中选择

时间:2012-02-15 15:04:23

标签: sql-server

我有一个名为customer_age的表,就像这样:

ID     1   2    3     4     5    6     7     8     9

NAME  JIM  JIM  JIM  NICK  NICK  NICK  Paul  Paul  Paul                                       
VALUE  20  13   12    10    20    8     4     24    14  

我希望只显示每个名字的第一条记录。像这样的东西

ID     1     4      7    

NAME  JIM  NICK   Paul                                  
VALUE  20   10      4    

到目前为止,我还没能解决这个问题。 我使用sql server 2005 任何帮助将不胜感激......

4 个答案:

答案 0 :(得分:14)

尝试使用子选择查找每个名称的最低ID,并使用该组ID从主表中提取记录:

SELECT ID, Name, Value
FROM customer_age
WHERE ID IN
(
    SELECT MIN(ID) AS ID
    FROM customer_age
    GROUP BY Name
)

答案 1 :(得分:2)

只需使用cross apply选择每个名称的第一条记录:

SELECT 
ca.ID, ca.NAME, ca.VALUE
FROM customer_age c
CROSS APPLY (SELECT TOP 1 ID, NAME, VALUE 
       FROM customer_age ca 
       WHERE ca.NAME = c.NAME ORDER BY ID) ca
ORDER BY ca.ID

答案 2 :(得分:2)

如何使用窗口函数?

SELECT Id, Name, Value
FROM (
    SELECT Id, Name, Value, ROW_NUMBER() OVER (PARTITION BY Name ORDER BY Id ASC) AS rowNum
    FROM customer_age
) AS sub
WHERE rowNum = 1

答案 3 :(得分:1)

假设第一个记录意味着最高ID,您可以按ID和TOP n的降序尝试查询。