暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle “分析之吻系列: 17滞后/线索子句”-返回错误的FROM_DATE和TO_DATE

askTom 2018-01-09
245

问题描述

你好,AskTOM,
这是指 “KISS系列分析: 17滞后/领先条款”:https://youtu.be/r7AM-1qX7Vs
测试用例可以在https://livesql.oracle.com/apex/livesql/file/content_CZUCT0MCOQZMJM7TI553HC8S9.html

当AskTOM因新问题而关闭时,我已向 @ connor_mc_d发送了一条推文,但没有得到任何回应。

livesql中的最终查询不符合期望。FROM_DATE和TO_DATE那里没有为每个状态返回正确的间隔。
我假设在基本表中订单列STATUS_DATE正在用时间戳填充,而当前状态实际上是在工作流或订单处理中识别的。然后,状态应存在,直到在订单中指示其状态,然后首先由另一个新的或先前已经存在的状态替换。

因此,第一个状态 “新” 从16年1月3日开始,并在16年1月4日更改为状态 “库存检查”,并在16年1月9日被 “等待签字” 取代。此状态在16年1月12日更改为 “仓库中” 状态。

因此,我希望结果的前三行是:

ORDER_ID  STATUS            FROM_DATE       TO_DATE
11700     New               03-JAN-16       04-JAN-16
11700     Inventory Check   04-JAN-16       09-JAN-16
11700     Awaiting Signoff  09-JAN-16       12-JAN-16


但是,livesql中的最终查询返回前三行:

ORDER_ID  STATUS            FROM_DATE       TO_DATE
11700     New               -               03-JAN-16
11700     Inventory Check   03-JAN-16       08-JAN-16
11700     Awaiting Signoff  08-JAN-16       11-JAN-16


所以我想知道什么是最好的查询来获得预期的,在我的观点中正确的结果也为FROM_DATE和TO_DATE?

问候,
伯恩哈德

专家解答

我想这是一个解释的问题,但是你可以做这样的事情

SQL> select
  2    order_id,
  3    status,
  4    nvl(1+lag(status_date) over (partition by order_id order by status_date),status_date)  from_date,
  5    1+status_date to_date
  6  from (
  7    select
  8      order_id,
  9      status_date,
 10      status,
 11      lag(status) over (partition by order_id order by status_date) lag_status,
 12      lead(status) over (partition by order_id order by status_date) lead_status
 13    from ORDERS
 14    )
 15  where lag_status is null
 16         or lead_status is null
 17         or lead_status <> status
 18  order by 1,3 nulls first;

  ORDER_ID STATUS               FROM_DATE TO_DATE
---------- -------------------- --------- ---------
     11700 New                  03-JAN-16 04-JAN-16
     11700 Inventory Check      04-JAN-16 09-JAN-16
     11700 Awaiting Signoff     09-JAN-16 12-JAN-16
     11700 In Warehouse         12-JAN-16 15-JAN-16
     11700 Awaiting Signoff     15-JAN-16 17-JAN-16
     11700 Payment Pending      17-JAN-16 19-JAN-16
     11700 Awaiting Signoff     19-JAN-16 21-JAN-16
     11700 Delivery             21-JAN-16 23-JAN-16


「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论