在我的表格中,我有两列prod_name
& prod_version_number
。我想要最新prod_name
的所有prod_version_number
。
更新:
|prod_name| prod_version_number |
| abc | 1 |
| abc | 2 |
| xyz | 1 |
| xyz | 2 |
| xyz | 3 |
我想要抓取abc
& xyz
version_number
的{{1}}&分别为2
。
这是我的尝试。
3
注意我知道SOF的规则。所以你可以撤消反对票。
答案 0 :(得分:1)
Oracle 11g R2架构设置:
CREATE TABLE products ( prod_name, prod_version_number ) AS
SELECT 'abc', 1 FROM DUAL
UNION ALL SELECT 'abc', 2 FROM DUAL
UNION ALL SELECT 'xyz', 1 FROM DUAL
UNION ALL SELECT 'xyz', 2 FROM DUAL
UNION ALL SELECT 'xyz', 3 FROM DUAL;
查询1 :
SELECT *
FROM (
SELECT p.*,
ROW_NUMBER() OVER ( PARTITION BY prod_name ORDER BY prod_version_number DESC ) AS rn
FROM products p
)
WHERE rn = 1
<强> Results 强>:
| PROD_NAME | PROD_VERSION_NUMBER | RN |
|-----------|---------------------|----|
| abc | 2 | 1 |
| xyz | 3 | 1 |
答案 1 :(得分:0)
SELECT d.prod_name
从表d
WHERE d.prod_version_number =(SELECT MAX(d1.prod_version_number)FROM table d1 WHERE d1.prod_name = d.prod_name)
通过使用GROUP BY子句不确定是否有更有效的方法来执行此操作,如果找到,则会考虑并稍后编辑。但目前,这应该有效。