【问题标题】:SQL Query for Order Status report from Oracle DB来自 Oracle DB 的订单状态报告的 SQL 查询
【发布时间】:2018-07-31 04:12:32
【问题描述】:

我在 Oracle DB 11 中有一个表 Order_Status,例如存储订单 ID 及其所有状态

order id    status                  date
100         at warehouse            01/01/18
100         dispatched              02/01/18
100         shipped                 03/01/18
100         at customer doorstep    04/01/18
100         delivered               05/01/18

几天前,一些订单被困在仓库中,但不可能每天检查每个订单的状态,所以直到我们收到一封来自业务的大型升级邮件,引起系统或日常需求报告将告诉我们所有订单的状态以及当前状态以及某些情况,例如是否有超过 2 天且数据库中没有为订单更新新状态,然后将其标记为红色或突出显示。

我们已经安排了一些报告,但即使为状态报告创建 SQL 查询,它也不会突出显示挂单。

注意:- SQL、Java 或其他一些工具建议都受到欢迎,但首选 SQL,然后是工具,然后是 java。

【问题讨论】:

  • 那么,假设订单 id 100 在仓库中连续 2 天处于状态,那么您需要突出显示报告……是这样吗?
  • 向我们展示您所展示的示例数据的预期输出。请涵盖您在示例中可以想到的所有场景,以避免混淆。另外,请务必通过发布该查询让我们知道您迄今为止尝试过的查询。

标签: java database oracle database-administration


【解决方案1】:

我假设您的要求是“状态将始终每 2 天更改一次,如果没有出现问题”

select * from (    
    select order_id, 
               status, 
               update_date, 
               RANK() OVER (PARTITION BY order_id ORDER BY update_date DESC) as rank 
        from Order_Status 
        where status != 'delivered'   
)
where update_date < sysdate - 2 and rank = 1

【讨论】:

  • 如果您的答案需要重大假设,请不要回答问题。正确的回应是发表评论要求澄清。您还不能发表评论,所以请选择回答与主题相关且实际上可以回答的问题。请阅读How to Answer
  • @joe 谢谢,你救了我的命,结果很完美,但有 1 个小问题,数据以 sql 格式出现order id status date 100 at warehouse 01/01/18 100 dispatched 02/01/18 100 shipped 03/01/18 100 delivered 05/01/18 有没有办法将其转换为仓库中的行订单 ID已发货 100 01/01/18 02/01/18 03/01/18 04/01/18 并突出显示延迟超过 2 天或是否有任何工具的订单。
  • 是的,您可以这样做,您正在寻找的是行到列。您希望将订单的行转换为只有一行的格式,具有 5 个状态列。我说的对吗?
  • 这是您要查找的 SQL select order_id, max(decode(t.status, 'at warehouse', update_date,null)) as at_warehouse_date, max(decode(t.status, 'dispatched', update_date,null)) as dispatched_date, max(decode(t.status, 'shipped', update_date,null)) as shipped_date, max(decode(t.status, 'at customer doorstep', update_date,null)) as at_customer_doorstep_date, max(decode(t.status, 'delivered', update_date,null)) as delivered_date from Order_Status group by order_id
  • 嗨 @JOEDAI 查询绝对完美,我添加了其余必填字段来创建报告,它工作正常,但现在我最后是结构,如果你能帮助我,那就太好了,1 - 在所有这些列中,我需要计算订单状态为“RESCHEDULED”的状态,换句话说,我们可以将其称为实际交付之前的交付尝试次数 2-我如何找到相同订单 ID 的 update_date 状态时的差异是“已创建”,现在是“已交付”,或者我们可以说已创建订单和已交付订单之间的时间间隔。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-06-03
  • 2016-07-31
  • 2010-11-08
  • 2018-09-10
  • 2019-11-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多