我有一个我需要运行的查询,它返回每个客户端最近更新的行。
在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上有类似的方法吗?我没有找到任何类型的排名功能的任何文档。
答案 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行。
答案 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
)