如何在SQL中获取一个实体的前10个条目的时差?

问题描述

sql表结构:

enter image description here

id -> primary key 
test_id -> id for test 
response_date -> date on which response is received for a test

相同的test_id可以有多个响应。我的目的是找到test_id的前10个响应(第10个response_date-1st response_date)的响应时间差。我尝试使用group by test_id和DATEDIFF,但是没有用。请提出其他合适的方法

Desired structure:
test_id  |  response_date_difference_for_first_ten_response

解决方法

如果我理解正确,则可以使用条件聚合:

select test_id,datediff(max(case when seqnum = 1 then response_date end),max(case when seqnum = 10 then response_date end)
               ) as response_date_difference_for_first_ten_response               
from (select t.*,row_number() over (partition by test_id order by response_date) as seqnum
      from t
     ) t
group by test_id;

您也可以这样表示:

select test_id,datediff(max(response_date),nullif(min(response_date),max(response_date))
               ) as response_date_difference_for_first_ten_response               
from (select t.*,row_number() over (partition by test_id order by response_date) as seqnum
      from t
     ) t
where seqnum in (1,10)
group by test_id;