问题描述
sql表结构:
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;