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