簡體   English   中英

SQL Server 查詢返回兩行中的日期與 OUTPUT 中的初始狀態列之間的差異

[英]SQL Server query to return difference between dates in two rows and initial status column in OUTPUT

我有兩個表, current_perf_rat and history_perf_rat

  • current_perf_rat包含 PersonRatingID、FirstName、LastName、Email、CurrentStatusID 列
  • history_perf_rat包含 PersonRatingID、StatusID、StatusName、StatusTimestamp、isCurrent 列

current_perf_rat

人員評級ID 電子郵件 當前狀態ID
123 許願 擁抱 xyz@gmail.com 678
456 史密斯 約翰 史密斯@xyz.com 746

history_perf_rat:

人員評級ID 狀態ID 狀態名稱 狀態時間戳 是當前
123 678 給出的評級 2021-10-01 10:00
123 746 草稿評級 2021-09-28 15:00 N
123 567 開始評分 2021-09-01 02:00 N
456 678 給出的評級 2021-08-13 22:00
456 746 草稿評級 2021-09-17 15:00 N
456 567 開始評分 2021-08-01 02:00 N
456 561 初始評級 2020-08-01 02:00 N

我想創建一個查詢,以了解僅在 2021 年,應用程序從所有人員評級 ID 的第一個狀態移動到下一個狀態需要多長時間。

下面的查詢為我提供了行詳細信息及其行號 -

SELECT DISTINCT
    current_perf_rat.PersonRatingID,
    history_perf_rat.StatusName,
    CAST(history_perf_rat.StatusTimestamp AS DATE) Application_date,
    ROW_NUMBER() OVER (ORDER BY history_perf_rat.StatusTimestamp ASC) rn
FROM 
    current_perf_rat, history_perf_rat
WHERE 
    current_perf_rat.PersonRatingID  = history_perf_rat .PersonRatingID 
    --and current_perf_rat.PersonRatingID =123 -- only one rating
ORDER BY
    history_perf_rat.StatusTimestamp ASC

這給了我想要使用的輸出 -

人員評級ID 狀態名稱 申請日期
456 開始評分 2021-08-01 2
456 初始評級 2020-08-01 1
123 草稿評級 2021-09-28 2
123 開始評分 2021-09-01 1

預期輸出:

人員評級ID 狀態名稱 花的時間
456 初始評級 1年
123 開始評分 1年28天
  • 如何修改這個 SQL 語句來獲取這兩個日期和初始狀態名稱之間的差異,即“Initiated Rating”和 started rating ? 有沒有辦法通過使用 LAG 或其他方法來做到這一點?

  • 另外,如何添加條件(參數)以便我可以選擇應該執行此操作的年份?

例如,在上面 456 的結果中,上面也包含了 2020 時間戳,但我只想包含 2021。這可以動態完成嗎?

您可以使用ROW_NUMBER僅獲取第一行,並使用LEAD獲取第一行之后的下一個Timestamp

SELECT
  h.PersonRatingID,
  h.StatusName,
  Time_Taken = DATEDIFF(day, StatusTimestamp, NextTime)
FROM (
    SELECT *,
      NextTime = LEAD(h.StatusTimestamp)
                        OVER (PARTITION BY h.PersonRatingID ORDER BY h.StatusTimestamp),
      rn = ROW_NUMBER() OVER (PARTITION BY h.PersonRatingID ORDER BY h.StatusTimestamp)
    FROM history_perf_rat h
    WHERE h.StatusTimestamp >= '2021-01-01'
) h
WHERE h.rn = 1;

數據庫<>小提琴

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM