SQL 在三重连接中使用最大函数
SQL using max function in triple join
我有 3 个 Table。我想加入他们所有人,我能做到。但是当我尝试使用 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 函数,我会得到
第 1 栏、第 2 栏、第 3 栏、第 4 栏
1 , 1 , 1 , 1
1 , 2 , 3 , 5
1 , 3 , 2 , 7
2、3、3、1
2、3、1、5
。 ,. ,. ,.
。 ,. ,. ,.
我想获取 col1 的 1 值的 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)
我算不上你的offer。你能帮我写代码吗?
输出
谢谢
将您的 group by
语句替换为此
group by A.X, B.Y, SUBSTRING(str,CHARINDEX('C.Z',str)+12,4)
可能:但没有详细说明 select 中每一列的来源(table 它来自哪里)我对此表示怀疑...
这假设 instance 和 secondDate 是应用程序中我们关心的唯一字段如果 customerNo 也在 table 中,那么它也需要添加到 内部 select并分组。
假设:
InstanceID 和 SecondDate 是应用程序中仅有的 select 列。
应用程序与 application_info 或请求之间的基数导致出现多个记录,并且在对这些值进行分组时导致不正确的结果。
我猜是因为在您的示例中,您的 select 中有 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()
我有 3 个 Table。我想加入他们所有人,我能做到。但是当我尝试使用 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 函数,我会得到
第 1 栏、第 2 栏、第 3 栏、第 4 栏
1 , 1 , 1 , 1
1 , 2 , 3 , 5
1 , 3 , 2 , 7
2、3、3、1
2、3、1、5
。 ,. ,. ,.
。 ,. ,. ,.
我想获取 col1 的 1 值的 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)
我算不上你的offer。你能帮我写代码吗?
输出
谢谢
将您的 group by
语句替换为此
group by A.X, B.Y, SUBSTRING(str,CHARINDEX('C.Z',str)+12,4)
可能:但没有详细说明 select 中每一列的来源(table 它来自哪里)我对此表示怀疑...
这假设 instance 和 secondDate 是应用程序中我们关心的唯一字段如果 customerNo 也在 table 中,那么它也需要添加到 内部 select并分组。
假设: InstanceID 和 SecondDate 是应用程序中仅有的 select 列。 应用程序与 application_info 或请求之间的基数导致出现多个记录,并且在对这些值进行分组时导致不正确的结果。
我猜是因为在您的示例中,您的 select 中有 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()