2013-03-14 2 views
3

Я имею такую ​​таблицу SQL SERVERВыберите различные верхние 4 записей из таблицы

Я хочу, чтобы все последние Лучшие 4 различных кодов из таблицы ниже
Помните, что я хочу, чтобы все столбцы должны быть возвращены колонки не только коды.

sno city  state country code date 
1 new york NY  US  1234 1/1/2013 
2 Houston TX  US  2234 1/6/2013 
3 LA  CA  US  1123 1/2/2013 
4 Chicago IL  US  1244 1/3/2013 
5 Brooklyn NY  US  1234 1/4/2013 
6 Dallas TX  US  2234 1/5/2013 

Мой следующий запрос выбора возвращает повторяющиеся коды, но я хочу отличные последние коды.

select top 4 * from table1 where code in (select distinct code from table1) 

Любая помощь очень ценится.

+0

Спасибо Kenneth за редактирование таблицы запроса и обновления – Henry

+0

Учитывая приведенные данные примера, каков вам должен быть результат? *** Пожалуйста, отредактируйте вопрос с этим. *** Потому что непонятно, что именно вы ожидаете - и это немного противоречит тому, что на экране. –

ответ

8
WITH topList 
AS 
(
    SELECT sno, city, state, country, code, date, 
      ROW_NUMBER() OVER(PARTITION BY code ORDER BY DATE DESC) rn 
    FROM TableName 
) 
SELECT TOP 4 sno, city, state, country, code, date 
FROM topList 
WHERE rn = 1 
ORDER BY DATE DESC 

ВЫВОД

╔═════╦══════════╦═══════╦═════════╦══════╦════════════╗ 
║ SNO ║ CITY ║ STATE ║ COUNTRY ║ CODE ║ DATE ║ 
╠═════╬══════════╬═══════╬═════════╬══════╬════════════╣ 
║ 2 ║ Houston ║ TX ║ US  ║ 2234 ║ 1/6/2013 ║ 
║ 5 ║ Brooklyn ║ NY ║ US  ║ 1234 ║ 1/4/2013 ║ 
║ 4 ║ Chicago ║ IL ║ US  ║ 1244 ║ 1/3/2013 ║ 
║ 3 ║ LA  ║ CA ║ US  ║ 1123 ║ 1/2/2013 ║ 
╚═════╩══════════╩═══════╩═════════╩══════╩════════════╝ 
+0

Спасибо - Это исправило проблему. – Henry

2

Это довольно просто с GROUP BY

SELECT TOP 4 * FROM table1 
WHERE sno IN (SELECT MAX(sno) FROM table1 GROUP BY code) 
ORDER BY date DESC; 

Хотя, это самый последний (?) группа по sno, а не по дате.

Смежные вопросы