繁体   English   中英

将同一张表的连续行中的同一列与多个ID进行比较

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM