如何 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;
我有一个用户回复数据库。允许用户随时返回并更改他们对任何给定问题的回答。我可以使用什么查询来最好地只提取用户最新的响应?我知道这与日期变量上的 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;