问题描述
你好,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日更改为 “仓库中” 状态。
因此,我希望结果的前三行是:
但是,livesql中的最终查询返回前三行:
所以我想知道什么是最好的查询来获得预期的,在我的观点中正确的结果也为FROM_DATE和TO_DATE?
问候,
伯恩哈德
这是指 “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进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




