You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

Oracle SQL如何计算当前订单与上一笔订单之间的间隔天数

计算当前订单与上一笔订单的间隔天数

嘿,别担心,这个需求用SQL的窗口函数就能轻松实现!从你的表名oe.orders和日期格式来看,你应该用的是Oracle数据库,正好Oracle的LAG()窗口函数完美适配这个场景。

核心思路

LAG()函数可以帮你获取同一排序规则下上一行的指定字段值——在这里,我们可以用它拿到上一笔订单的日期,然后用当前订单日期减去这个日期,就能得到间隔天数了。

完整SQL代码

SELECT 
    order_id,
    order_date,
    -- 截断时分秒部分,计算整数间隔天数
    TRUNC(order_date) - TRUNC(LAG(order_date) OVER (ORDER BY order_date)) AS days_since_last_order
FROM oe.orders 
WHERE customer_id = 838 
ORDER BY order_date DESC;

代码细节解释

  1. LAG(order_date) OVER (ORDER BY order_date):按订单日期升序排序后,为每一行返回上一行的order_date值。最新的订单(结果第一行)没有上一笔订单,所以这个值会是NULL
  2. TRUNC(order_date):因为你的日期包含时分秒,直接相减会得到带小数的天数(比如间隔2天3小时会显示2.125)。用TRUNC()截断时间部分,只保留纯日期,这样相减得到的就是整数天数。
  3. 处理NULL值(可选):如果希望最新订单的间隔天数显示为0而不是NULL,可以用NVL()函数替换:
NVL(TRUNC(order_date) - TRUNC(LAG(order_date) OVER (ORDER BY order_date)), 0) AS days_since_last_order

针对你样本数据的示例结果

order_idorder_datedays_since_last_order
192025-MAR-19 15.45.38.000000000NULL
161808-FEB-19 12.51.39.00000000045
159204-FEB-19 07.35.46.0000000004

(注:25-MAR-19减去08-FEB-19是45天,08-FEB-19减去04-FEB-19是4天)

内容的提问来源于stack exchange,提问作者katarzynat

火山引擎 最新活动