[英]Compare same column in consecutive rows in same table with multiple ID's
我有一个用户要报告的请求,而对于SQL编程我还是太陌生,不知道如何处理它。
我的用户想为每个员工ID知道两次访问之间的最小,平均和最大天数。 我不知道如何计算出访问1和访问2之间的天数; 每个人员ID的访问2和访问3,依此类推。 某些人员ID只有一次访问,而其他人(大多数)有多次访问(最多26次)。 这是一些数据的快照(完整的数据集超过14k条记录):
PersonID VisitNo StaffID VisitDate
161 1 42344 06/19/2018
163 1 32987 05/14/2018
163 2 32987 09/17/2018
193 1 42344 04/09/2018
193 2 42344 07/18/2018
193 1 33865 07/18/2018
207 1 32987 10/10/2018
207 2 32987 11/05/2018
329 1 42344 04/15/2018
329 2 42344 05/23/2018
329 3 42344 06/10/2018
329 4 42344 07/18/2018
329 1 33865 06/30/2018
329 2 33865 09/14/2018
我的研究发现,有很多参考资料可以用来比较同一张表中的行,并且我发现了如何使用自我连接和datadiff对单个PersonID进行一次访问与下一次访问的比较,但是如何从一个PersonID进行到下一个访问,或者只需1次访问就跳过那些PersonID? 还是访问了多个StaffId的PersonID?
任何想法/建议都将不胜感激,因为我有两个要求将从中受益。
您可以使用分析函数LEAD (myvar,1) OVER ()
来自https://www.techonthenet.com/sql_server/functions/lead.php的示例
SELECT dept_id, last_name, salary,
LEAD (salary,1) OVER (ORDER BY salary) AS next_highest_salary
FROM employees;
对于平均天数,您可以使用聚合:
select personid,
(datediff(day, min(visitdate), max(visitdate)) * 1.0 / nullif(count(*) - 1, 0)
from t
group by personid;
我使用了SQL Server语法,但是在任何数据库中都存在相同的想法。 平均值是最大值减去最小值,再除以访问次数减去一。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.