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

Oracle 如何根据ord_sts查找最小ord_date和age

ASKTOM 2019-08-17
354

问题描述

请注意,我是一个新手 (大约8个月接触Oracle Sql-所以请温柔 :)

我有以下场景

表A包含:
Wave_No,Wave_Desc,Wave_Date

表B包含:
Wave_No,Order_No,Order_Date,Order_Status

表C包含:
订单 _ 否,行 _ 否,发货 _ 数量,订单 _ 数量

注:
1.表A包含许多波
2.每波可以有很多订单,有多个订单日期和状态
3.订单状态可以是拣货,完成
4.以下是sql:

select z.*

from 
(Select 
to_char(trunc(A.WAVE_DATE),'DD/MM/YY') As WAVE_DATE
, A.WAVE_NUM WAVE_NUM
, A.WAVE_DES WAVE_DESC

,sum(C.ord_qty) ORD_QTY 
,SUM(case when B.ORD_STS = 'COMPLETE' then C.ship_qty else 0 end) CTN_PICKED
,SUM(case when B.ORD_STS = 'PICKING' then C.ship_qty) else 0 end) CTN_TO_BE_PICKED

, to_char(trunc(min(b.ord_date)),'DD/MM/YY') oldest_pick_order_date
, trunc(sysdate) - trunc(min(b.ord_date)) oldest_pick_order_age

From WAVE_tbl A
join ORD_Htbl B on A.COMP = B.COMP and A.ORD_NO = B.ORD_NO
join ORD_Dtbl C on C.COMP = B.COMP and C.ORD_NO = B.ORD_NO

Where A.COMP = 'ABC' and C.ORD_QTY > 0  
and b.cust = 'CustomerA'

--and b.ord_date = (select least(ord_date) from ORD_htbl x 
--                           where x.comp=b.comp and x.ord_no=b.ord_no 
--                            and x.ord_sts = 'PICKING') 

group by trunc(A.WAVE_DATE), A.WAVE_NUM,A.WAVE_DES 
) z
复制


问题: 我需要报告按波浪、波浪描述、订单数量和挑选纸箱的总和和要挑选的纸箱进行总结,但我也想知道最旧的 “未确认订单” 和年龄 (从订单日期到当前日期的天数)。

如何获得处于状态拣选的订单的最旧的order_date?

当前代码返回最旧的日期,而无需测试订单状态,并且有较旧的订单已完成,因此我想绕过它们并找到最旧的拣选订单。

我尝试了注释掉的代码,但这坚持认为我在组中有ord_date,然后影响我的结果 (我得到同一波的多行,每个不同的订单日期都有中断 :(

感谢您的帮助。

专家解答

您可能想做一些像您在总和中一样的事情: 检查MIN内的状态,仅在状态为选择时返回日期。

例如:

min ( case when B.ORD_STS = 'PICKING' then b.ord_date end )
复制


如果这没有帮助,那么请为您的数据发布一个完整的测试用例,包括:

为所有表创建表
这些表的一些插入形式的数据
您期望基于这些数据的输出
文章转载自ASKTOM,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论