Я сделаю следующее:
Запустите запрос, который вернет мне последнюю запись текущего года, возьмите поле из этой записи.
Это таблица, которую я использовал для этого:
ID(int,PK) FremdID(int) Erstellung(datetime) Number(int)
1 10 2019-05-31 09:15:41.003 1
2 11 2019-05-31 09:15:42.154 3
Поэтому, если я запущу запрос, он должен вернуть строку с индексом 2, потому что мы живем в 2019 году, а это последняя запись за 2019 год.
Если мы сейчас находимся в 2020 году, запрос не должен возвращать ни одной строки, потому что для 2020 года нет записи.
Это должно сделать это
SELECT a.Number
FROM [YourTable] a
JOIN (SELECT MAX(Erstellung) AS Erstellung
FROM [YourTable]
WHERE DATEPART(YEAR,Erstellung) = DATEPART(YEAR,GETDATE())
) b ON a.Erstellung = b.Erstellung
Обновите ответ. Вы также можете использовать подзапросы для этого
Я бы порекомендовал:
SELECT TOP(1) t.*
FROM #Table t
WHERE Erstellung >= DATEFROMPARTS(YEAR(GETDATE()), 1, 1)
ORDER BY Erstellung DESC;
Я рекомендую это, потому что он совместим с индексом. Он может воспользоваться индексом (Erstellung DESC)
.
Если вы используете такую функцию, как YEAR(Erstellung)
в предложении WHERE
, индекс не будет использоваться.
Спасибо, да, это дает мне последнюю строку. Но только поле datetime, мне нужно поле Number