如何 select SQL 中的最新(最大日期)条目?

How to select the most up to date (max date) entry in SQL?

我有一个用户回复数据库。允许用户随时返回并更改他们对任何给定问题的回答。我可以使用什么查询来最好地只提取用户最新的响应?我知道这与日期变量上的 MAX() 函数有关,但我被细节绊倒了。这是一个例子:

 USER_ID     SURVEY_NAME    QUESTION_NAME   UPDATE_DATE  RESPONSE
 A1           BIG SURVEY       Q1             01/01/22    BAD  
 A1           BIG SURVEY       Q2             01/01/22    GOOD  
 A1           BIG SURVEY       Q3             01/01/22    OK  
 A1           BIG SURVEY       Q1             01/08/22    GOOD  

从上面的数据来看,我只想提取这个:

 USER_ID     SURVEY_NAME    QUESTION_NAME   UPDATE_DATE  RESPONSE
 A1           BIG SURVEY       Q2             01/01/22    GOOD  
 A1           BIG SURVEY       Q3             01/01/22    OK  
 A1           BIG SURVEY       Q1             01/08/22    GOOD 

您可以使用 row_number() 查找每个 (USER_ID、SURVEY_NAME、QUESTION_NAME) 三元组具有最新日期的行:

with cte as
(select USER_ID,SURVEY_NAME,QUESTION_NAME,UPDATE_DATE,RESPONSE, 
row_number() 
over(partition by USER_ID,SURVEY_NAME,QUESTION_NAME
order by UPDATE_DATE desc) rn
from mytable)
select USER_ID,SURVEY_NAME,QUESTION_NAME,UPDATE_DATE,RESPONSE
from cte
where rn = 1;

Fiddle