каков наилучший способ иметь SQL, который просматривает только MAX поля даты

#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)