我有一个带有两个表的 db2 数据库;让我们打电话给他们order
和order_comment
。
我想要的是检索最新评论的日期以及订单信息。
例如,在 sql server 2005 上,我可以编写如下查询:
select a.*, (select comment_datetime FROM
(select comment_datetime, RANK() OVER (PARTITION BY order_id ORDER BY comment_datetime DESC) AS [rank]
FROM order_comment c where c.order_id = a.id
) b where b.[rank] = 1) as 'Last Comment'
from order a
这将返回以下数据:
| 编号 | 描述 | 最后评论 | | 1 | 假订单 | 2013-04-03 10:05:04.797 |
但是,当我尝试对我的 db2 数据库运行以下查询(我认为是等效的)时,我收到此错误:Column or global variable id1 not found.
select b.id1, b.id2, b.status,
(select a.code from
(select code, RANK() over (order by date desc, time desc) as recent from
history where h_id1 = b.id1 and h_id2 = b.id2
and code in ('A', 'B', 'C')) a where a.recent = 1)
as 'recent code'
from item b
经过一番尝试,我发现id1
在我的第一个子查询中使用并没有产生相同的错误;只有在子查询中使用超过一级的全局值时,我才会遇到问题。
这是预期的行为吗?我觉得这很奇怪。我认为任何数量的子查询都应该能够访问属于任何父级的任何值(就像 sql server 2005 上的情况一样,我假设大多数其他 RDBMS)。
如果这实际上是预期的行为,还有其他方法可以完成这项任务吗?