Java 从Oracle DB查询订单状态报告的SQL查询

Java 从Oracle DB查询订单状态报告的SQL查询,java,database,oracle,database-administration,Java,Database,Oracle,Database Administration,我在OracleDB11中有一个表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

我在OracleDB11中有一个表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天且DB中没有更新新状态,则将其标记为红色或突出显示

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


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

我假设您的要求是状态将始终每两天更改一次,如果没有问题的话

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

例如,假设订单id 100在仓库中的状态连续2天,那么您需要突出显示报告。是这样吗?向我们展示您显示的样本数据的预期输出。请涵盖您可以在示例中想到的所有场景,以避免混淆。此外,也请通过发布该问题,让我们知道您迄今为止尝试过的问题。如果您的答案需要重大假设,请不要回答任何问题。正确的回答是发表评论,要求澄清。您还不能发表评论,所以请选择回答与主题相关且实际上可以回答的问题。请阅读。@joe谢谢,你救了我一天,结果很完美,但有一个小问题,数据是sql格式的订单id状态日期100仓库01/01/18 100发货02/01/18 100发货03/01/18 100发货05/01/18是否有办法将其转换为行发货仓库订单id发货10001/01/18 02/01/18 03/01/18 04/01/18并突出显示延迟超过2天的订单,或者如果有任何工具可用于此操作。是的,您可以这样做,您需要的是从行到列。您希望将订单的行转换为只有一行的格式,其中包含5个状态列。我说的对吗?这是您要查找的SQL选择订单id、maxdecodet.status、“at warehouse”、update\u date、null as\u warehouse\u date、maxdecodet.status、“dispatched”、update\u date、null as dispatched\u date、maxdecodet.status、“shipped”、update\u date、null as shipped\u date、maxdecodet.status、,“at customer doorstep”,update_date,null as_customer_doorstep_date,maxdecodet.status,'delivered',update_date,null as delivered_date from Order_status group by Order_idHi@JOEDAI query绝对完美,我添加了创建报告所需的其余字段,效果很好,但现在我是struct,如果你能帮助我那就太好了,1-沿着所有这些列,我需要计算订单状态为“重新安排”的状态,换句话说,我们可以说它是实际交付前的交付尝试次数2-我如何才能找到相同订单id的更新日期(创建时的状态和现在的交付时的状态)之间的差异,或者我们可以说创建和交付之间的时间间隔交付订单。