这是一张包含ID,订购时间和买家电话号码的订单表
我正在尝试结束Oracle查询以过滤掉latest phone order per each phone number
:
因此,这可能会请求MAX(order_time),但也需要按电话号码分组。
以下是表结构和数据,但实际的订单表大约有20个字段,所以GROUP BY子句可能很长,所以查询非常笨拙
那么什么是最佳性能的最佳解决方案?
由于
===========================================================
| order id | order_time | phone |
===========================================================
| 228 | 12-23-2013 12:25:28 PM | 1234567890 |
===========================================================
| 236 | 11-16-2013 11:46:24 AM | 6665558887 <- |
===========================================================
| 249 | 02-21-2014 10:25:16 PM | 1234567890 <- |
===========================================================
| 256 | 01-14-2014 10:25:33 PM | 4567891230 |
===========================================================
| 269 | 02-21-2013 11:49:57 AM | 1234567890 |
===========================================================
| 288 | 02-25-2014 01:25:05 PM | 4567891230 <- |
===========================================================
| ... | ...................... | .......... |
===========================================================
| 299 | 12-23-2013 12:25:28 PM | 2223336669 <- |
===========================================================
这是预期的查询结果:
===========================================================
| order id | order_time | phone |
===========================================================
| 236 | 11-16-2013 11:46:24 AM | 6665558887 <- |
===========================================================
| 249 | 02-21-2014 10:25:16 AM | 1234567890 <- |
===========================================================
| 288 | 02-25-2014 01:25:05 PM | 4567891230 <- |
===========================================================
| ... | ...................... | .......... |
===========================================================
| 299 | 12-23-2013 12:25:28 PM | 2223336669 <- |
===========================================================
答案 0 :(得分:1)
您需要一个窗口聚合函数:
select *
from
(
select tab.*,
rank() over (partition by phone order by order_time desc) rnk
) dt
where rnk = 1