ROW_COUNT 等同于系统间缓存?

ROW_COUNT Equivalent for Intersystems Cache?

我有一个查询需要 运行 returns 每个客户最近更新的行。

在 SQL 服务器中,我将执行以下操作:

SELECT * 
FROM 
(
    SELECT *, ROW_NUMBER() OVER (PARTITION BY client_id ORDER BY date_updated DESC) AS rn
    FROM client_address
) a
WHERE a.rn = 1

在 Intersystems Cache 上是否有类似的方法来执行此操作?我没有找到任何类型的排名函数的文档。

我查看了 the docs 并且似乎没有 SQL Server、Oracle 或 Postgres 中存在的任何 Window 函数,因此您无法使用ANTI-THETA-SELF-JOIN 解决方案。

SELECT *
FROM 
   client_address a
   LEFT JOIN client_address b
   on a.client_id  = b.client_id 
     and a.date_updated < b.date_updated 
WHERE
   b.client_id is null

您可以使用 %vid 变量。例如:

SELECT *, %vid FROM (SELECT * FROM Sample.Person) WHERE %vid BETWEEN 5 AND 10

return 来自 Sample.Person table 的第 5-10 行。

Documentation.

Discussion on InterSystems Caché developer community.

在投票之前!!!!我只是问这是否可行。它更多的是基于我过去如何做到这一点的学习。我可能不明白这个问题,宁愿删除或讨论也不愿收到反对票:)

SELECT *
FROM client_address a
WHERE
a.date_updated = 
(
SELECT max(b.date_updated) FROM client_address b
group by b.Client_id
)

参见the documentation for HAVING。在这种情况下如何使用它:

SELECT *
FROM client_address
GROUP BY client_id
HAVING date_updated = MIN(date_updated)