2014-11-05 51 views
-1

呼籲HISTORY此表:我如何彙總表在Oracle中的日期

CREATE TABLE HISTORY (START_DATE DATE, POSITION VARCHAR2(80 BYTE)); 

表填充這樣的:

START_DATE POSITION 
15-jun-1983 SUPPLY ATTENDANT 
01-abr-1987 SUPPLY HELPER 
01-mar-1990 SUPPLY ASSISTANT 
01-mai-1991 TECHNICAL SUPLY ASSISTENT 
01-abr-1999 TECHNICAL SUPLY ASSISTENT SR 
01-dez-1999 SUPPLY TECHNICIAN 
01-mai-2001 SUPERVISOR 
01-jul-2002 SUPERVISOR 
01-jan-2004 SECTOR MANAGER 
01-jul-2005 SECTOR MANAGER 
01-fev-2006 SECTOR MANAGER 
01-jan-2007 SENIOR SUPPLY TECHNICIAN 
01-mai-2007 SECTOR MANAGER 
01-fev-2008 SENIOR SUPPLY TECHNICIAN 

我要作出這樣的概括它像一個查詢這樣:

START_DATE POSITION 
15-jun-1983 SUPPLY ATTENDANT 
01-abr-1987 SUPPLY HELPER 
01-mar-1990 SUPPLY ASSISTANT 
01-mai-1991 TECHNICAL SUPLY ASSISTENT 
01-abr-1999 TECHNICAL SUPLY ASSISTENT SR 
01-dez-1999 SUPPLY TECHNICIAN 
01-mai-2001 SUPERVISOR 
01-jan-2004 SECTOR MANAGER 
01-jan-2007 SENIOR SUPPLY TECHNICIAN 
01-mai-2007 SECTOR MANAGER 
01-fev-2008 SENIOR SUPPLY TECHNICIAN 

簡而言之,我想要刪除分組的位置重複,只保留第一個。有人知道如何?

在此先感謝

+0

你如何保存訂單????? – 2014-11-05 19:13:22

回答

1

隨着Maheswaran Ravisankar這裏的幫助是實現結果的查詢

WITH NEW_DATASET 
    AS (SELECT START_DATE, 
       POSITION, 
       NVL (LAG (POSITION) OVER (ORDER BY START_DATE), 'NONE') 
        AS PRIOR_POSITION 
      FROM HISTORY) 
SELECT START_DATE, POSITION 
    FROM NEW_DATASET 
WHERE POSITION <> PRIOR_POSITION; 

我興趣是保持日期最低的位置,而不會干擾其他數據集中同一位置的其他出現。爲此,LAG做了訣竅。

謝謝!

1

我們可以使用LEAD功能做到這一點。

比較與即將推出的位置(按順序下一個記錄存儲在數據庫中)的當前位置

WITH my_data AS 
    (
    SELECT rownum AS rn,history.* FROM history 
), 
    my_data_ranked AS 
    (SELECT START_DATE, 
    POSITION, 
    rn, 
    lead(position,1,0) OVER(order by rn) as lead, 
    lag(position,1,0) OVER(order by rn) as lag 
    FROM my_data 
) 
SELECT * FROM my_data_ranked 
where POSITION <> LEAD 
ORDER BY rn 
+0

非常感謝您的幫助Maheswaran!它打開了我的想法!事實證明,在這種情況下,LAG功能更適合我。 – 2014-11-06 10:20:49

+0

@jamesfrj我也試圖保持存儲數據的順序。現在看來你在按日期排序。反正很高興它幫助你! – 2014-11-06 10:33:33