Получите максимальную дату на основе другого столбца в SQL

#sql #sql-server #tsql #stored-procedures #max

Вопрос:

У меня есть переменная таблицы, которая состоит из столбцов id, даты и статуса, как показано ниже

 DECLARE @DateValues TABLE (
    id int identity(1,1), 
    dates datetime,
    status varchar (5)
)
 

Ниже приведены примерные данные

 INSERT INTO @DateValues values ('5/22/2021','')
INSERT INTO @DateValues values ('5/21/2021','ABC')
INSERT INTO @DateValues values ('5/22/2021','ABC')
 

Также объявлена переменная, как показано ниже.

 DECLARE @MaxID INT
 

Из этой таблицы мне нужно получить строку, содержащую максимальное значение даты( MAX(даты)), где статус «ABC», из приведенных выше значений примеров я должен получить в результате 3-ю строку, и мне нужно присвоить соответствующее значение идентификатора строки переменной (@MaxID).

Я попытался выполнить запросы, но получил несколько наборов результатов

 SELECT id, MAX(dates), Footer
FROM @DateValues
WHERE STATUS = 'ABC'
GROUP BY id, STATUS

SELECT id, dates, status
FROM @DateValues
WHERE dates = (
    SELECT MAX(dates)
    FROM @DateValues
);
 

Мне нужно что-то вроде:

 @MaxID = id
FROM @DateValues
WHERE dates = (
    SELECT MAX(dates)
    FROM @DateValues
    WHERE STATUS='ABC'
);
 

Пожалуйста, помогите.

Комментарии:

1. Каков требуемый результат ?

2. нужно назначить @MaxID с идентификатором максимальной даты, где статус=’ABC’

3. Пожалуйста, на самом деле покажите свой желаемый результат(ы).

Ответ №1:

Это то, чего ты хочешь?

 SELECT *
FROM   (
           SELECT *, RN = ROW_NUMBER() OVER (ORDER BY dates DESC)
           FROM   @DateValues
           WHERE  status = 'ABC'           
       ) AS D
WHERE  D.RN = 1