【发布时间】:2010-12-03 06:37:27
【问题描述】:
给定两张表,
表
A包含customerid、lastchange、internallink表
B包含internallink、turnover
(我这里只是简单的把它改成一个通用的例子,实际结构更复杂。SQL方言现在是mySQL。)
唯一独特的东西(每个表)是内部链接。 A 中有几条记录具有相同的 customerID、不同的 lastchange 日期和不同的 internallink 值。 还有其他与此相关的项目;我无法更改表格。
我需要来自 A 的记录 ID,这些记录 ID 是客户的最新记录(具有相同 customerID 的所有记录中的最高 lastchange 值)和 B 中的条目与某个值匹配条件已关联。
我觉得
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);
现在我所需要的只是两者的交集......具有正确的逻辑!
【问题讨论】:
-
有没有办法可以发布一些示例数据?每张表只有几条记录?用你写的东西很难想象问题。
-
您可能对此stack-exchange proposal 感兴趣。它几乎可以开始测试了,只需要更多。
标签: sql group-by nested grouping query-help