2012-02-15 4 views
6

У меня есть таблица с именем customer_age что LOKS так:SQL выбрать из нескольких записей только самые последние

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  

До сих пор я не смог его обработать. i use sql server 2005 Любая помощь была бы оценена ...

+7

Я предполагаю, что «первая запись» означает тот, у которого самый низкий ID? –

ответ

13

Попробуйте использовать подзапрос, чтобы найти самый низкий идентификатор для каждого имени, и использовать этот набор идентификаторов, чтобы вытащить записи из главной таблицы:

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

Предполагая, что первая запись означает наивысший идентификатор, вы можете попробовать ваш запрос с убывающим порядком ID и TOP n.

1

Просто выберите первую запись для каждого имени, используя 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 
+0

Это дает повторяющиеся результаты, 3 строки в join_age присоединяются к 1 строке, возвращенной из приложения. – Umair

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 
Смежные вопросы