使用三重连接中的最大函数的SQL

时间:2015-12-08 16:47:18

标签: sql sql-server-2008 join left-join inner-join

我有3张桌子。我想加入他们,我可以做到。但是当我尝试使用MAX函数时,我得到了错误。

SELECT A.X, B.Y, SUBSTRING(str,CHARINDEX('C.Z',str)+12,4) as score,   MAX(A.Q)
FROM A(NOLOCK)
JOIN B
ON A.BID = B.id 
JOIN  C 
ON   B.Cid = C.ID
WHERE C.ApplicationDate BETWEEN '01-01-2013' AND GETDATE() 
group by B.Customer

如果我不写MAX功能,我会

Col1,Col2,Col3,Col4

1,1,1,1

1,2,3,5

1,3,2,7

2,3,3,1

2,3,1,5

。 ,。 ,。 ,。

。 ,。 ,。 ,。

我想获得col4' s值的col4最大值。例如 我想在这个例子中得到1,3,2,7和2,3,1,5值。

我该怎么做?谢谢你的帮助。

编辑

SELECT InstanceID, CustomerNo, Date, SUBSTRING(str,CHARINDEX('TTHA',str)+12,4) as score, MAX(SecondDate) as 'SearchDate' FROM application(NOLOCK) JOIN application_info ON application.application_info_id = application_info.id JOIN Request ON application.request_id = Request.id WHERE Request.Date BETWEEN '01-01-2000' AND GETDATE() group by InstanceID,CustomerNo,Date,SUBSTRING(str,CHARINDEX('TTHA',str)+12,4)

我不算你的报价。你能帮我解决一下我的代码吗?

OUTPUT I want to get highlighted values

由于

2 个答案:

答案 0 :(得分:2)

将您的group by语句替换为此

group by A.X, B.Y, SUBSTRING(str,CHARINDEX('C.Z',str)+12,4)

答案 1 :(得分:0)

可能:但是没有关于选择中每一列的来源的详细信息(来自它的表)我怀疑它......

这假设instance和secondDate是我们关注的Application中的唯一字段如果customerNo也在该表中,则需要将其添加到内部选择和分组中。

假设: InstanceID和SecondDate是Application中唯一的选择列。 应用程序与application_info或Request之间的基数导致出现多条记录,并且在对这些值进行分组时会导致不正确的结果。

我在猜测,因为在你的例子中,你的选择中有5列,输出中只有4列。所以我不知道缺少哪一列。

SELECT InstanceID, CustomerNo, 
       Date, SUBSTRING(str,CHARINDEX('TTHA',str)+12,4) as score,  
       SecondDate as 'SearchDate'
FROM (SELECT instanceID, max(SecondDate) SecondDate 
      FROM application 
      GROUP BY instanceID) Application
JOIN application_info 
ON application.application_info_id = application_info.id 
JOIN  Request 
ON   application.request_id = Request.id
WHERE Request.Date BETWEEN '01-01-2000' AND GETDATE()