我有一个名为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 任何帮助将不胜感激......
答案 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的降序尝试查询。