#tsql
#tsql
Вопрос:
Я хотел бы получить 10 лучших данных из таблицы, которые необходимо отсортировать по возрастанию во внешнем запросе. Ниже приведен псевдокод запроса. Какие есть варианты, кроме использования табличных функций?
select * from
(select top 10 tour_date
from tourtable
order by tour_date desc)
order by tour_date asc
Ответ №1:
Ваш запрос в том виде, в каком он написан, должен сработать, вам просто нужно будет указать псевдоним подзапроса:
select *
from (select top 10 tour_date from tourtable order by tour_date desc) t
order by tour_date asc
Другой вариант, предполагающий SQL Server 2005 :
SELECT t.tour_date
FROM (SELECT tour_date, ROW_NUMBER() OVER(ORDER BY tour_date DESC) AS RowNum
FROM tourtable) t
WHERE t.RowNum <= 10
ORDER BY t.tour_date ASC
который также может быть написан с помощью CTE:
WITH cteRowNum AS (
SELECT tour_date, ROW_NUMBER() OVER(ORDER BY tour_date DESC) AS RowNum
FROM tourtable
)
SELECT tour_date
FROM cteRowNum
WHERE RowNum <= 10
ORDER BY tour_date ASC
Ответ №2:
Протестировано в контексте, отличном от tsql:
select * from (select tour_date from tourable order by tour_date desc limit 10) a order by tour_date asc