Oracle sql: 同一张表 (支付成功时间字段-支付请求时间字段)相加 然后除以笔数 如何写
时间: 2024-12-23 13:18:43 浏览: 8
在Oracle SQL中,如果你想计算每笔交易的平均支付成功的延迟时间(即支付成功时间减去支付请求时间),并返回结果除以总的交易笔数,你可以使用窗口函数(Window Function)。假设表名为`transactions`,并且有`request_time`和`success_time`两个字段以及`transaction_id`作为唯一标识符,可以尝试这样的查询:
```sql
WITH transaction_summary AS (
SELECT
transaction_id,
request_time,
success_time,
ROW_NUMBER() OVER (PARTITION BY transaction_id ORDER BY request_time) as row_num
FROM transactions
)
SELECT
transaction_id,
AVG((success_time - request_time)) / COUNT(*) OVER (PARTITION BY transaction_id) as avg_delay
FROM
transaction_summary
WHERE
row_num = 1; -- 取每个交易的第一条记录,即支付成功最早的记录
```
这个查询首先创建了一个临时表`transaction_summary`,其中包含了每笔交易的行号按请求时间排序。然后,通过窗口函数计算了每笔交易的平均支付延迟,并将其除以该笔交易的总次数(也就是行号的数量)。请注意,这里我们只取了`row_num = 1`的记录,这是因为对于同一笔交易,我们只需要考虑一次支付。
阅读全文