sql - SQL Server - 条件自联接
问题描述
我有如下表格:
通话详情
呼叫者 | 接收者 | 开始于 | 开始时间戳 | LastModified时间戳 | 结果 | 方向 |
---|---|---|---|---|---|---|
111111 | 91919 | 13.39 | 1636342600 | 1636342601 | 错过 | 入站 |
111111 | 91919 | 15.40 | 1636342828 | 1636343128 | 错过 | 入站 |
91919 | 111111 | 19.45 | 1636400728 | 1636401028 | 已回答 | 出境 |
222222 | 91919 | 20.50 | 1636404628 | 1636405000 | 错过 | 入站 |
预期输出:
未接电话详情
呼叫者 | 接收者 | 未接来电 | CalledBackAt | 再次联系 | 已接未接来电(以分钟计) |
---|---|---|---|---|---|
111111 | 91919 | 15.40 | 19.45 | 是的 | 245 |
222222 | 91919 | 20.50 | 不 |
联合的两个主要条件如下:
当接收者向同一呼叫者返回呼叫时 - 应该考虑
IsContactedAgain = YES
当呼叫没有返回
LastModifiedTimestamp
给呼叫者之后
我需要一个未接来电的联合体,它们是answered
和unanswered
。
到目前为止,我想出了以下内容:
SELECT
m.StartedAt AS MissedCallAt
, r.StartedAt AS CalledBackAt
, 'Y' AS IsContactedAgain
, DATEDIFF(mi, m.StartedAt, r.StartedAt) AS 'CalledIn(Minutes)'
FROM
CallDetails m, CallDetails r
WHERE
CONVERT(char(10), M.StartedAt,126) = DATEADD(Day, -1, CAST( GETDATE() AS Date))
AND m.UserId IS NULL
AND m.Outcome = 'Missed call'
AND r.Recipient = m.Caller
AND r.StartedTimestamp > m.LastModifiedTimestamp
AND r.Direction = 'Outbound'
ORDER BY
m.StartedAt, r.StartedAt
解决方案
左连接在这里可以用来包含未接来电而没有回调。
SELECT m.StartedAt AS MissedCallAt
, r.StartedAt AS CalledBackAt
, CASE WHEN r.StartedAt IS NOT NULL THEN 'YES' ELSE 'NO' END AS IsContactedAgain
, DATEDIFF(minute, m.StartedAt, r.StartedAt) AS [CalledIn(Minutes)]
FROM CallDetails m
LEFT JOIN CallDetails r
ON r.Direction = 'Outbound'
AND r.Recipient = m.Caller
AND r.Caller = m.Recipient
AND r.StartedTimestamp > m.LastModifiedTimestamp
WHERE m.Direction = 'Inbound'
AND m.Outcome = 'Missed call'
AND m.StartedAt > DATEDIFF(SECOND,'1970-01-01', DATEADD(Day, -1, CAST(GETUTCDATE() AS DATE)))
ORDER BY m.StartedAt, r.StartedAt
推荐阅读
- swift - SwiftUI:如何在呈现时阻止滑动以消除行为
- tensorflow - 使用 TensorFlow Object Detection API:RPN 损失不断增加。有没有办法让RPN损失减少?
- javascript - 如何修复'带有innerText的循环变量'
- java-8 - 在 Java 8 中使用 Optionals 和 forEach,检查空对象
- java - 使用 Intellij Java Apache Poi,如何摆脱 java.lang.nullpointerexception 从 Excel 文件中读取非空整数值
- python - 如何每 10 分钟循环一次脚本(CRON)?
- python - 要求用户输入会在 Python 中引发 IO TypeError
- javascript - 仅适用于 Visual Studio 的 JavaScript 语法错误
- angular - 角度 Azure AD 回调。身份验证后,获取无法发布回调
- karate - 如何修复 - `ERROR com.intuit.karate - http 请求失败`