我有下面的審計表。需要找到年份為年份 Getdate()) 的最小行與年份為年份的最小行(getdate())-1

預期結果
Date ID Name
18-01-2022 101 test1
10-02-2021 101 test12
uj5u.com熱心網友回復:
下面應該可以幫助您找到正確的解決方案,使用 group by,編輯 where 條件以滿足您的需求
SELECT MIN(YOUR_COLUMN)
FROM YOUR_TABLE
WHERE YEAR(YOUR_COLUMN) > (2020) -- ADD YOU CONDITION HERE
GROUP BY YEAR(YOUR_COLUMN)
uj5u.com熱心網友回復:
您可以使用標準的“Top 1”解決方案來做到這一點,例如ROW_NUMBER.
無論您做什么,都不要在WHERE子句中使用函式。改用日期范圍:
SELECT
t.date,
t.id,
t.name
FROM (
SELECT *,
ROW_NUMBER() OVER (PARTITION BY YEAR(date) ORDER BY date) rn
FROM YourTable t
WHERE t.date >= DATEFROMPARTS(YEAR(GETDATE()) - 1, 1, 1)
AND t.date < DATEFROMPARTS(YEAR(GETDATE()) 1, 1, 1)
) t
WHERE t.rn = 1;
uj5u.com熱心網友回復:
我會使用視窗函式來排序每年的日期:
DECLARE @T TABLE([DATE] DATE, ID INT, [NAME] NVARCHAR(20))
INSERT INTO @T VALUES
('2022-01-18', 101, 'Test1' )
, ('2022-01-19', 101, 'Test2' )
, ('2022-01-20', 101, 'Test3' )
, ('2022-01-21', 101, 'Test4' )
, ('2021-02-10', 101, 'Test12')
, ('2021-02-11', 101, 'Test13')
, ('2021-02-12', 101, 'Test14')
, ('2021-02-13', 101, 'Test15')
;WITH A AS (
SELECT [DATE], ID, [NAME], ROW_NUMBER() OVER (PARTITION BY YEAR([DATE]) ORDER BY DATE) RN
FROM @T)
SELECT YEAR([DATE]), [DATE], ID, [NAME] FROM A WHERE RN = 1 ORDER BY YEAR([DATE]) DESC
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/451751.html
上一篇:使用UNION和INTERSECT時PostgreSQL的執行順序
下一篇:yq只比較部分檔案
