Member 14405442 Ответов: 1

Как мне...выбрать последние 3 raw в этом запросе


;WITH emp_hierarachy as(
SELECT EmployeeId as emp,EmployeeId, Manager,Firstname + ' ' + surname as name,Position  FROM tblEmployee
UNION ALL
SELECT rs.emp,t.EmployeeId,t.Manager, t.Firstname + ' ' + surname as name,t.Position FROM tblEmployee t 
INNER JOIN emp_hierarachy rs ON t.EmployeeId = rs.Manager
)

select row_number() OVER (ORDER BY(select 1)) id,rs.name,rs.Position from emp_hierarachy rs
where rs.emp = 179 

--and rs.EmployeeId != rs.emp 

order by id desc

What I have tried:

limit with order by but it is not working


give me soluiton

1 Ответов

Рейтинг:
0

MadMyche

Вы экспериментировали с TOP- Каковы были результаты?

SELECT TOP 3 Row_Number()...
Обновленный. Последние 3 строки могут быть достигнуты, если вы измените порядок, который у вас есть на месте. Вот полный запрос, основанный на этом:
;WITH emp_hierarachy AS(
	SELECT	emp = EmployeeId, EmployeeId, Manager, Firstname + ' ' + surname as [name], Position
	FROM		tblEmployee
		UNION ALL
	SELECT	rs.emp, t.EmployeeId, t.Manager, t.Firstname + ' ' + surname as [name], t.Position
	FROM		tblEmployee     t
	INNER JOIN emp_hierarachy rs ON t.EmployeeId = rs.Manager
)

	SELECT	TOP 3 id = Row_Number() OVER (ORDER BY (SELECT 1))
		,	rs.name
		,	rs.Position
	FROM		emp_hierarachy     rs
	WHERE	rs.emp = 179 
--	AND	rs.EmployeeId	!= rs.emp 
	ORDER BY ID -- DESC
Примечания/Вопросы/Вопросы
Пожалуйста, обратите внимание, что имя поле заключено в квадратные скобки. Имя-это одно из тех слов, которое в определенных контекстах является особенным.Я обычно избегаю их использования.

В своем комментируемом предложении AND вы используете != для неравенства. Пока это действительно в сервере SQL, стандарта ANSI, чтобы использовать <> таким образом, переносимость этого кода может быть ограничена.

CTE, похоже, собирает больше данных, чем ему нужно; вызываются только столбцы EmployeeID, [name] и position, а объединение ALL собирается добавить дубликаты записей.

Мне было бы интересно увидеть образцы данных и результаты, которые вы ожидаете получить; поскольку я не знаю схемы этих таблиц, но я думаю, что это может быть значительно сокращено кодовым способом


Member 14405442

выберите последние 3 строки n
не топ-3 raw....

phil.o

Технически, чтобы выбрать последние 3 строки, вы меняете порядок сортировки и берете верхние 3.
Редактировать:

SELECT TOP 3 Row_Number() ... ORDER BY id ASC

Herman&lt;T&gt;.Instance

Да, это и есть решение проблемы! Опубликуйте это как решение!

phil.o

Я не уверен, что второе решение добавит какую-то ценность. Вопрос может быть даже решен к настоящему времени без закрытия ОП.
Но спасибо за виртуальный 5, я ценю это :)

MadMyche

Я обновлю ответ, был нажат на время, когда я опубликовал первоначально