這個讓我難住了。我是否遺漏了什么,或者團隊是否需要更改將資料轉儲到我的資料庫中的方式?
我正在計算在“Extended Worktime”中花費的時間,但想排除當天登錄到“Tier 2”的所有用戶。
問題是“班級名稱”列僅在用戶登錄時填充,而不是在他們繼續“延長作業時間”時填充。我的問題:是否有一個查詢我可以撰寫腳本來識別當天代理在第 2 層并將其從我的報告中排除?
如果在正確的方向上輕輕一推,將不勝感激。
| 行號 | Agent_First_Name | 型別 | 代理ID | 埃克諾 | 期間 | 登錄日期時間 | 中斷原因 | 班級 | 班級名稱 |
|---|---|---|---|---|---|---|---|---|---|
| 61272 | 戴夫 | 升 | 100 | 3382 | 0 | 17/11/2021 08:00:24 | 10 | 一級 | |
| 61273 | 戴夫 | 寬 | 100 | 142 | 17/11/2021 08:07:24 | 延長作業時間 | 0 | ||
| 61274 | 戴夫 | 寬 | 100 | 112 | 17/11/2021 08:15:24 | 延長作業時間 | 0 | ||
| 61275 | 約翰 | 升 | 320 | 4201 | 0 | 17/11/2021 09:04:24 | 9 | 2級 | |
| 61276 | 約翰 | 寬 | 320 | 100 | 17/11/2021 10:13:24 | 延長作業時間 | 0 | ||
| 61277 | 約翰 | 寬 | 320 | 85 | 17/11/2021 11:15:24 | 延長作業時間 | 0 |
uj5u.com熱心網友回復:
您可以通過ClassName以下方式填補空白:
with cte
as
(
select ROW_NUMBER() OVER (PARTITION BY AgentID ORDER BY ROWID) rn,
* from YourTable
)
select
ROWID, Agent_First_Name, [Type], BreakReason,
case
when [Type] = 'L' then ClassName
else lag(ClassName, rn-1, 0) OVER (PARTITION BY AgentID ORDER BY ROWID)
END
from cte
這將回傳:
| 行號 | Agent_First_Name | 型別 | 中斷原因 | 班級名稱 |
|---|---|---|---|---|
| 61272 | 戴夫 | 升 | 一級 | |
| 61273 | 戴夫 | 寬 | 延長作業時間 | 一級 |
| 61274 | 戴夫 | 寬 | 延長作業時間 | 一級 |
| 61275 | 約翰 | 升 | 2級 | |
| 61276 | 約翰 | 寬 | 延長作業時間 | 2級 |
| 61277 | 約翰 | 寬 | 延長作業時間 | 2級 |
填寫 ClassName 后,您可以使用WHERE ClassName != 'Tier 2'子句或任何您需要的內容:
with cte
as
(
select ROW_NUMBER() OVER (PARTITION BY AgentID ORDER BY ROWID) rn,
* from YourTable
), final
as(
select
ROWID, Agent_First_Name, [Type], BreakReason,
case
when [Type] = 'L' then ClassName
else lag(ClassName, rn-1, 0) OVER (PARTITION BY AgentID ORDER BY ROWID)
END ClassName
from cte
)
select *
from final
where ClassName != 'Tier 2'
你有一個 DBFiddle 來玩它:https ://dbfiddle.uk/?rdbms=sqlserver_2019&fiddle=56255540560c74b583af2e9b61df0fd9
uj5u.com熱心網友回復:
您可以為此使用條件視窗計數
SELECT *
FROM (
SELECT *,
Tier2 = COUNT(CASE WHEN t.ClassName = 'Tier 2' THEN 1 END) OVER (PARTITION BY AgentID, CAST(LoginDateTime AS date))
FROM YourTable t
) t
WHERE t.BreakReason = 'Extended Worktime'
AND t.Tier2 = 0;
投射到date意味著計數按每個日期進行磁區
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/360637.html
標籤:sql-server 数据库
上一篇:Oracle索引加入非空
下一篇:使用關聯表的新外鍵更新表的列
