我有两个名为LocalVSDB和TemporaryVSDB的表。两个表都具有相同的列:
LocalVSDB: msisdn,activateDate
TemporaryVSDB: msisdn,activateDate
但是这两个表也有MSIDSN的重复行
我需要加入这两个表。我的预期结果如下:
MSISDN LocalActivateDate TemporaryActivateDate Datediff
60103820251 2013-12-14 2013-10-05 70
601111000254 2013-12-14 2013-10-05 70
601111000254 2013-12-18 2013-09-10 80
但是,由于存在重复的MSIDSN,我加入时会出现重复的行。例如,每个表中某些MSISDN有6行,所以当我加入时,我得到的MSISDN共有36行。
我正在使用以下查询加入:
SELECT t.msisdn,t.activateDate AS VSDB_Activate_Date,
l.activateDate AS Local_Activate_Date,
DATEDIFF(D,l.activateDate,t.activateDate) AS date_Diff
FROM temporaryVSDB2 t
INNER JOIN LocalVSDB l ON t.msisdn = l.msisdn
WHERE t.activateDate > l.activateDate
请帮助我如何获得6行6个MSISDN?
提前致谢。
答案 0 :(得分:1)
问题是:
where t.activateDate > l.activateDate
这意味着表1中的一行可以连接到表2中的所有六行。您需要将此更改为=或根据特定条件从第二个表中获取单行。
答案 1 :(得分:1)
SELECT m.MSIDN, m.ActiveDate, t.ActiveDate, DATEDIFF(DAY, m.ActiveDate, t.ActiveDate) Duration
FROM LocalVSDB m
OUTER APPLY
(
SELECT TOP 1 d.MSIDN, d.ActiveDate
FROM TemporaryVSDB d
WHERE d.ActiveDate > m.ActiveDate
ORDER BY d.ActiveDate
) t
这会找到最近的合作伙伴记录和持续时间(最后一条记录将有一个空的合作伙伴)
答案 2 :(得分:0)
您可以使用自己的查询添加group by子句,前提是msidn和activateDate会生成唯一的行。
SELECT t.msisdn,t.activateDate AS VSDB_Activate_Date,
l.activateDate AS Local_Activate_Date,
DATEDIFF(D,l.activateDate,t.activateDate) AS date_Diff
FROM temporaryVSDB2 t INNER JOIN LocalVSDB l ON t.msisdn = l.msisdn
WHERE t.activateDate > l.activateDate
group by t.msisdn, t.activateDate