我在表格中有这些行
ID Name Price Delivery
== ==== ===== ========
1 apple 1 1
2 apple 3 2
3 apple 6 3
4 apple 9 4
5 orange 4 6
6 orange 5 7
Run Code Online (Sandbox Code Playgroud)
如果没有第三次交货,我希望第三次交货(交货= 3)或最后价格的价格.
它会给我这个:
ID Name Price Delivery
== ==== ===== ========
3 apple 6 3
6 orange 5 7
Run Code Online (Sandbox Code Playgroud)
我不需要一个完整的解决方案,但是对于寻找什么的想法将不胜感激.
使用ROW_NUMBER两次 - 一次过滤掉第三次传递后的行,第二次查找剩余的最后一行(即典型的每组查询的最大值)。
我已经使用 CTE 实现了这一点。我在 SQL Server 中测试了它,但我相信 Oracle 支持相同的语法。
WITH T1 AS (
SELECT
ID, Name, Price, Delivery,
ROW_NUMBER() OVER (PARTITION BY Name ORDER BY Delivery) AS rn
FROM Table1
), T2 AS (
SELECT
t1.*,
ROW_NUMBER() OVER (PARTITION BY Name ORDER BY Delivery DESC) AS rn2
FROM T1
WHERE rn <= 3
)
SELECT ID, Name, Price, Delivery
FROM T2
WHERE rn2 = 1
Run Code Online (Sandbox Code Playgroud)
结果:
ID Name Price Delivery
3 apple 6 3
6 orange 5 7
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2054 次 |
| 最近记录: |