【发布时间】:2011-10-25 06:41:30
【问题描述】:
SELECT MID, FAD.FirstOpenedDate ,LCD.LastCloseDate
FROM mwMaster.dbo.Merchant M
JOIN (
SELECT MerchID, MIN(moddate) AS FirstOpenedDate
FROM mwMaster.dbo.MerchantStatusHistory
GROUP BY MerchID
) FAD ON FAD.MerchID = M.MerchID
LEFT JOIN (
SELECT MerchID, MAX(moddate) AS LastCloseDate
FROM mwMaster.dbo.MerchantStatusHistory
GROUP BY MerchID
) LCD ON LCD.MerchID = M.MerchID
JOIN (
SELECT merchid ,avg(Transactions) ,avg(Profit)
FROM mwMaster.dbo.ResidualSummary RS
WHERE RS.Date_Processed < LCD.LastCloseDate
GROUP BY Merchid
) R ON R.MerchID = M.MerchID
我在执行以下联接时遇到问题。我之前遇到过这个问题并使用过临时表,但想找出我做错了什么。基本上不工作的线是倒数第三条。 “
有什么想法吗?
在旁注中,我还看到人们使用 CROSS 和 OVER。不熟悉它的工作原理,但可能适用于这里?
【问题讨论】:
-
你能用简单的英语解释一下你想在这里实现什么吗?
-
使用嵌套查询加入表,并在 select 语句的 where 子句中使用上面创建的表中的列之一
-
@marc - 看起来问题是他想在另一个子查询中使用对子查询的引用,基本上。
-
是否需要最后一个连接?我没有看到您引用了
R子查询中的任何列。 -
@Conrad Frix:是的,但是如果不需要列,我们可以消除计算聚合的开销,并可能使用
WHERE EXISTS...而不是JOIN来改进。跨度>
标签: sql tsql join nested-sets