从LeftJoin的MAX值的子查询

问题描述

我在sql Server中有此查询,我想知道它是否可以更短?

我对所有列进行了一个查询(带有group by),只是为了获得3个日期的MAX()值,这些值来自左连接表。

我想我不能没有子查询获取3个日期的MAX()。

SELECT otherCol1,otherCol2,MAX(UnsubscribedDate) AS UnsubscribedDate,MAX(OpenedDate) AS OpenedDate,MAX(ClickedDate) AS ClickedDate
FROM (
    SELECT otherCol1,tu.JoinDate AS UnsubscribedDate,trkOp.Clicktime AS OpenedDate,trkRes.Clicktime AS ClickedDate
    FROM v_members_email_occurrence vmec
    LEFT JOIN tracking_unsubscribed tu WITH (NOLOCK) ON tu.ReportId = vmec.SendingId
    LEFT JOIN tracking_opened trkOp WITH (NOLOCK) ON trkOp.ReportId = vmec.SendingId
    LEFT JOIN tracking_result trkRes WITH (NOLOCK) ON trkRes.ReportId = vmec.SendingId
    WHERE vmec.MemberId = @MemberId
    ) AS Result
GROUP BY otherCol1,otherCol2

解决方法

您可以聚合而无需子查询:

SELECT otherCol1,otherCol2,MAX(tu.JoinDate) AS UnsubscribedDate,MAX(trkOp.Clicktime) AS OpenedDate,MAX(trkRes.Clicktime) AS ClickedDate
FROM v_members_email_occurrence vmec
LEFT JOIN tracking_unsubscribed tu WITH (NOLOCK) ON tu.ReportId = vmec.SendingId
LEFT JOIN tracking_opened trkOp WITH (NOLOCK) ON trkOp.ReportId = vmec.SendingId
LEFT JOIN tracking_result trkRes WITH (NOLOCK) ON trkRes.ReportId = vmec.SendingId
WHERE vmec.MemberId = @MemberId
GROUP BY otherCol1,otherCol2