#sql #sql-server
#sql #sql-server
Вопрос:
я хочу запросить таблицу, в которой один столбец равен run_date. Я хочу получать результаты только там, где run_date является последней run_date в столбце run_date. возможно ли иметь такой динамический запрос, как этот. что-то вроде:
Select * from Order where DateUpdated = Max(DateUpdated)
Комментарии:
1. Вы можете перечислить данные и УПОРЯДОЧИТЬ ИХ По DateUpdated DESC. ЭТО дает вам самую новую запись сверху.
Ответ №1:
Это вернет вам все результаты с последней обновленной датой.
Select *
from Order
where DateUpdated = (SELECT Max(DateUpdated)
FROM Order )
Ответ №2:
Если вам нужна самая последняя строка:
select top 1 *
from Order
order by DateUpdated desc
Если вам нужно получить все строки, соответствующие самой последней дате, то вы можете эффективно сделать это с помощью CTE:
with cte
as
(
select *, rank() over(order by DateUpdated desc) RankNumber
from [Order]
)
select *
from cte
where RankNumber = 1
Предполагая MS SQL 2005 или выше.
Если вы используете SQL 2000, то у use zerkms есть ответ.
Комментарии:
1. Что, если есть несколько записей с одинаковой датой?
2. @zerkms — Я думал, что нужна самая последняя строка.
3. @Alex Aza: «Я хочу получать только result_S_»
4. @Alex Aza: возможно, но я не верю, что в данном случае это так.
5. Кстати, любопытно, каким будет план выполнения вашего второго совета. Вложенный запрос полного сканирования внешний запрос полного сканирования или что-то более производительное
Ответ №3:
попробуйте этот запрос
Select * from Order where DateUpdated = (select Max(DateUpdated) from Order)