SQL 从 Oracle 数据库查询订单状态报告
SQL Query for Order Status report from Oracle DB
我在 Oracle DB 11 中有一个 table 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 天并且数据库中没有更新订单的新状态,则将其标记为红色或突出显示.
我们已经用 cron 安排了一些报告,但即使为状态报告创建 SQL 查询,它也不会突出显示挂单。
注意:- SQL、Java 或其他一些工具建议均受欢迎,但 SQL 优先于工具然后 java。
我假设您的要求是 "status will always change in every 2 days, if not there is something wrong"
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
我在 Oracle DB 11 中有一个 table 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 天并且数据库中没有更新订单的新状态,则将其标记为红色或突出显示.
我们已经用 cron 安排了一些报告,但即使为状态报告创建 SQL 查询,它也不会突出显示挂单。
注意:- SQL、Java 或其他一些工具建议均受欢迎,但 SQL 优先于工具然后 java。
我假设您的要求是 "status will always change in every 2 days, if not there is something wrong"
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