给定两张桌子,
A
包含customerid
,lastchange
,的表internallink
表
B
包含internallink
,turnover
(我这里只是简单的把它改成一个通用的例子,实际的结构更复杂。SQL方言现在是mySQL。)
唯一独特的东西(每个表)是内部链接。A 中有几条记录具有相同的 customerID、不同的 lastchange 日期和不同的 internallink 值。还有其他与此相关的项目;我无法更改表格。
我需要来自 A 的记录 ID,它们是客户的最新记录(具有相同 customerID 的所有记录中的最高 lastchange 值),并且B 中与某个值条件匹配的条目链接到这些记录 ID。
我觉得
SELECT `internallink` FROM `B` WHERE (`turnover` > 10000)
部分不是问题。
我做到了这一点:
SELECT `customerID`, MAX(`lastchange`)
FROM `A`
WHERE `lastchange` IN (SELECT `internallink` FROM `B`
WHERE `turnover` > 10000)
GROUP BY `customerID`;
唉,该语句给出了错误的结果,因为上面将返回我最近的值不满足条件的客户 ID,但是一些较旧的值 - 它选择最旧的值,并返回这个。但是,如果最近的条目低于阈值,那么 customerID 根本不应该出现。
我哪里出错了,正确的方法是什么?
样本数据表 A
customerid lastchange 内部链接 3 2010-02-11 11 3 2010-09-04 12 3 2010-10-22 13 3 2010-11-23 14 4 2010-05-05 15 4 2010-12-01 16 5 2010-11-28 17 5 2010-11-29 18
表 B
内部链接周转 11 47000 12 11000 13 8000 14 15000 15 17000 16 23000 17 50000 18 10000
我的测试中的实际阈值是 12000。您可以看到 customerID 不应该在结果集中,因为最近的条目低于阈值。
结果集应该是 (3,2010-11-23)(4,2010-12-01) - 但目前它还包含 (5,2010-11-28),这是错误的。
靠近一点(在您的帮助下,谢谢!),这两个语句都有效:
SELECT customerID, MAX(lastchange), internallink FROM A GROUP BY customerID; SELECT internallink FROM B WHERE (营业额 > 12000);
现在我需要的是两者的交集......具有正确的逻辑!