#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