我需要加入两组数据,但由于数据质量不佳,还有一个问题。
这两个数据集是呼叫(电话)和通信(创建的有关电话的记录)。它们的ID分别叫做call_id和comm_id。通信记录还具有call_ids以执行连接。问题是数据收集系统无法正常工作,我有大量的通信,我无法匹配特定的呼叫。并非所有通话都会产生通信。
对于每一天,我需要创建一个联合列表来执行一些分析。 问题是由于缺少一些链接,我得到3种不同的行类型:
我想要做的是对于给定日期的“Just Comm”行的每一行,我应该删除同一日期的“Just Call”行。我不需要来自呼叫的任何值,我只需要知道呼叫发生了。如果我这样做,我将得到正确的行数,因为所有“只是通信”将删除一个“只调用”行,据我所知,这是创建通信的调用。
我的问题是如何在SSIS中执行此操作。我已经到了我的数据集,其中包含我需要的所有数据,并且是我上面提到的3种行类型的混合。您如何建议我完成删除“Just Call”行的过程?
答案 0 :(得分:0)
不确定SSIS,但我可以给你一些SQL开始。
似乎你对这些电话并不过分感兴趣,因为如果数据与通信不匹配,你愿意忽略这些数据。
对我而言,这听起来像是典型的LEFT JOIN情况:
SELECT
call.call_id,
call.some_data,
comm.comm._id
comm.some_data,
FROM
Communications comm
LEFT JOIN Calls call ON call.call_id = comm.call_id
WHERE
<date filter: today>
这将为您提供今天的所有通信,仅与正确链接的那些呼叫配对。今天的所有其他电话都不会在结果集中结束。
编辑:
从OP的评论到另一个答案:
我想采取所有无与伦比的 电话和通讯记录。从...开始 通话记录并在列表中下载 将它们与任何通信记录匹配 从同一天开始。每个通讯记录 应该只使用一次。如果打电话 记录无法找到未使用的通讯 匹配日期然后它应该保留 空...
我发现这种方法存在一个关键问题:
在程序之后应该保留哪些“呼叫”记录? TOP 17(17是“call / comm” - 今天的失败计数)?什么都留下了?最新的电话?
在结果集中留下17个随机呼叫记录可能是什么价值?它们没有任何有用的信息。它们并不比你划掉的那些好。你打算在某个地方展示它们吗?为什么?
我会选择LEFT JOIN并简单地收集其余部分。
答案 1 :(得分:0)
我不确定我是否完全理解了你的问题,但也许你可以尝试一下FULL OUTER JOIN:
SELECT
CL.ID AS CALL_ID,
CL.DATE AS CALL_DATE,
CM.ID AS COMM_ID,
CM.DATE AS COMM_DATE
FROM
CALLS CL
FULL JOIN
COMMUNICATIONS CM ON
(CM.CALL_ID = CALL.ID)
WHERE
(CL.ID IS NULL) OR
(CM.ID IS NULL)
这将返回包含NULL呼叫ID或通信ID的所有行(即具有“断开链接”的行)。
然后您可以将其用作视图(让我们称之为 VCALLS_COMMS )并将其连接到自身以查找具有匹配日期的行:
SELECT
VCC1.CALL_ID,
VCC2.CALL_ID
FROM
VCALLS_COMMS VCC1
JOIN
VCALL_COMMS VCC2 ON
(VCC2.COMM_DATE = VCC1.CALL_DATE)
也许这不是你想要的,希望它有所帮助。