ROW_COUNT等效于Intersystems Cache?

时间:2016-07-05 15:10:05

标签: intersystems-cache

我有一个我需要运行的查询,它返回每个客户端最近更新的行。

在SQL Server中,我会执行以下操作:

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上有类似的方法吗?我没有找到任何类型的排名功能的任何文档。

4 个答案:

答案 0 :(得分:4)

我查看了the docs,并且看起来不是SQL Server,Oracle或Postgres中存在的任何Window函数,因此您仍然坚持使用ANTI-THETA-SELF-加入解决方案。

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

答案 1 :(得分:3)

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

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

答案 2 :(得分:0)

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

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

将返回Sample.Person表中的第5-10行。

Documentation.

Discussion on InterSystems Caché developer community.

答案 3 :(得分:0)

之前投票!!!!我只想问这是否有效。根据我过去如何做到这一点,它更像是我的学习。我可能不理解这个问题,宁愿删除或讨论也不愿接受投票:)

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