2017-10-04 94 views
1

SQL查询(Oracle DB);sql group by order time

select DT.MODULENO,DT.SLOTNO,DT.DID,MAX(DT.DEVICEKEY)as TIME 
    from DEVICETRACE DT 
    INNER JOIN PCBTRACE PT on DT.DEVICEKEY=PT.DEVICEKEY 
    where SUBSTR(PT.PCBID,7,6)='019479' 
    group by DT.MODULENO,DT.SLOTNO,DT.DID 



MDN SLNO DID    TIME 
    1 1 3017230000001705 20171003051515 
    1 9 3017260000001437 20171002225453 
    1 9 3017260000001438 20171003051515 
    1 16 3017230000001681 20171002235012 
    1 16 3017230000001680 20171003051515 
    1 17 3017270000003284 20171003074307 
    1 17 3017270000003249 20171003145129 
    1 17 3017270000003253 20171003153600 
    1 18 3017240000000274 20171003153600 
    1 19 3017200000000148 20171003083715 
    1 19 3017200000000147 20171003120846 
    1 19 3017200000000146 20171003153420 
    1 19 3017200000000145 20171003153600 
    1 20 3017230000000876 20171003051515 
    1 21 3017250000001389 20171003072136 
    1 21 3017250000001388 20171003082830 
    1 21 3017250000001395 20171003093001 
    1 21 3017250000001408 20171003103917 

我怎样才能做到以上结果如下。

MD SLNO BEFORE_DID   NOW_DID   TIME 
1 1    -   3017230000001705 20171003051515 
1 1  3017260000001437 3017260000001438 20171003051515 
1 16  3017230000001681 3017230000001680 20171003051515 
1 17  3017270000003249 3017270000003253 20171003145129 
1 19  3017200000000147 3017200000000146 20171003153420 
1 18    -   3017240000000274 20171003153600 

什么,我想在上面的例子中是打印MDNO和SLNO组为两列并排side.How的最后两个额外的DID应查询是让上面的代码在上面的例子中?感谢

+0

没有必要标记这个问题为'C#'。 – SeM

+0

编辑后感谢 –

回答

0

喜欢的东西:

WITH your_query (MDN, SLNO, DID, time) AS (
    -- your query here 
) 
SELECT * 
FROM (SELECT MDN, 
       SLNO, 
       DID, 
       MAX(time) OVER (PARTITION BY MDN, SLNO) AS time, 
       ROW_NUMBER() OVER (PARTITION BY MDN, SLNO ORDER BY time DESC) AS rn 
     FROM your_query) 
PIVOT (MAX(DID) FOR rn IN (2 AS Before_DID, 1 AS Now_DID)); 
+0

其工作..thankss人。 –