簡體   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