表:
UserId, Value, Date.
Run Code Online (Sandbox Code Playgroud)
我想得到UserId,每个UserId的max(Date)值.也就是说,具有最新日期的每个UserId的值.有没有办法在SQL中执行此操作?(最好是Oracle)
更新:对任何含糊不清的道歉:我需要获取所有UserIds.但对于每个UserId,只有该用户具有最新日期的那一行.
请解释一下KEEP到底是什么以及有/没有它的效果。
寻找解释但找不到明确的解释。
Oracle 中带和不带 KEEP 的 PARTITION BY
“KEEP”的真正意义/力量是当您对不同列进行聚合和排序时。
不幸的是,当您开始搜索“keep”子句时,您将在 Oracle 文档中找不到任何内容(希望通过这篇博文,人们现在可以获得参考)。当然,Oracle 记录了这些功能。您只需知道它们在 SQL 语言参考中被称为 FIRST 和 LAST 即可。
# However, you can do even better by just adding three "keep clause" functions to the original query:
SELECT
ra.relation_id,
MAX(ra.startdate) startdate,
MAX(ra.address) KEEP(DENSE_RANK LAST ORDER BY ra.startdate) address,
MAX(ra.postal_code) KEEP(DENSE_RANK LAST ORDER BY ra.startdate) postal_code,
MAX(ra.city) KEEP(DENSE_RANK LAST ORDER BY ra.startdate) city
FROM
relation_addresses ra
WHERE
ra.startdate <= to_date(:reference_date, 'yyyy-mm-dd')
GROUP BY
ra.relation_id
Run Code Online (Sandbox Code Playgroud)