2017-08-28 67 views
0

我有一个包含交易记录订单Oracle表。每个订单(a.SLLITM)上的每个订单项(a.SLLITM)都会经过多个状态点(a.SLLTTR)。我试图捕捉第一个状态 - 状态可能会有所不同。逻辑上我的想法是使用“小时”字段中的最小值。有多个状态代码订购产品 - 只需要第一次交易各行项目

任何帮助将不胜感激!

SELECT 
to_char(to_date(a.SLTRDJ +1900000, 'yyyyddd'), 'mm/dd/yyyy') "Order Date", 
a.SLDCTO "Order Type", 
a.SLDOCO "Order Number", 
a.SLLITM "2nd Item Number", 
a.SLTORG "Transaction Originator", 
substr(TRIM(a.SLKCOO),3,3)||'500' "Branch", 
    to_char(substr(lpad(to_char(to_number(lpad(a.SLTDAY,6,0),'000000')),6,0),1,2),'00') "Hour", 
a.SLFRTH "Ship Via" 

FROM PRODDTA.F42199 a 

    WHERE a.SLDCTO IN ('CS','SO','ST') 
    AND a.SLLNTY IN ('S','SS') 
    AND a.SLLTTR IN ('520, '540') 
    AND a.SLTRDJ > 117050 
    AND a.SLKCOO IN ('00200', '00600') 
+0

哪一个是 “小时” 字段(列!),什么是它的数据类型? – mathguy

+0

a.SLTDAY - 这是一个整数 –

+0

洛尔 - **的** HOUR列叫做SLT ** ** DAY和它的数据类型是'NUMBER'。为什么? – mathguy

回答

0

由于我没有你的表格,我不能在他们身上演示。取而代之的是,这里是一个如何选择,在SCOTT模式(在Oracle安装标准),并在各部门最早HIREDATE员工的工作。

通知的EARLIEST_JOB列中的输出,以及如何聚集函数首先是SELECT子句中用于计算它。

http://docs.oracle.com/cd/B28359_01/server.111/b28286/functions058.htm#SQLRF00641

select e.deptno, d.dname, min(e.hiredate) as earliest_hiredate, 
     min(e.job) keep (dense_rank first order by e.hiredate) as earliest_job 
from emp e join dept d on e.deptno = d.deptno 
group by e.deptno, d.dname 
; 

DEPTNO DNAME  EARLIEST_HIREDATE EARLIEST_JOB 
------ ---------- ------------------- ------------ 
    10 ACCOUNTING 1981-06-09 00:00:00 MANAGER 
    20 RESEARCH 1980-12-17 00:00:00 CLERK 
    30 SALES  1981-02-20 00:00:00 SALESMAN 
相关问题