微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决如何在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;

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。