【发布时间】:2011-06-23 17:26:15
【问题描述】:
有时找到传达“问题”的最佳方式与找到解决方案一样困难......哈哈,但这里是......
我有一张公司表,我有一张相关表,其中包含每家公司的一些历史...... 我想返回一个查询,其中包含每家公司最后 3 个“历史”条目的记录集...
所以记录集看起来像这样......
company A
history Az
history Ay
history Ax
company B
history Bz
history By
history Bx
company C
history Cz
history Cy
history Cx
我遇到的问题是,如果我 LIMIT 3 - 连接在那里,我只获取所有记录的最后 3 条记录,而不是每个公司的最后 3 条记录...
这是我最后一次尝试的方法 - 但它只是撤回了一家公司,3 条记录.. 就是这样......(IBM DB2 9 - 但唯一应该影响的是语法限制为 3.. )
SELECT
C.CompanyName
,H.*
FROM Companies C
JOIN CompanyTypes CT ON C.fkTypeID = CT.ID
INNER JOIN (
SELECT sCH.*
FROM CompanyHistory sCH
ORDER BY sCH.DATE DESC
FETCH FIRST 3 ROWS ONLY
) H ON H.fkCompanyID = C.ID
WHERE CT.Type = 'bookstore'
我做错了什么?
【问题讨论】:
-
顺便说一句 - 将我的 INNER JOIN 更改为 LEFT OUTER JOIN 返回所有公司,但只有 FIRST 公司的前 3 条记录,它忽略了其他公司的历史......
-
问题在于您将记录数从
CompanyHistory限制为3 无论公司如何。您需要将 3 行限制移到联接之外。我会考虑一下并回复你。