2014-06-09 24 views
-1

我有一個當前查詢,它返回查詢參數中的所有值。SQL SELECT DISTINCT組中的最新行

但是它返回舊的值時,我只希望最新線爲每個顯示,我了個去,在使用max()DISTINCT,但我不能得到的輸出,我想

目前代碼

SELECT 
IME.TP AS [Time], 
IU.FS07 AS [LID], 
IU.I AS [LNum], 
IME.TPL AS [Location], 
(SELECT CASE 
     WHEN IME.TPL = 'Y' 
     THEN 'GTG' 
     ELSE 
      (SELECT CASE 
        WHEN IME.TPL = 'V' 
        THEN 'WAIT' 
        ELSE 'WAIT' 
        END) 
     END) AS [Go To] 

FROM 
IU 
INNER JOIN IUFV ON IU.G = IUFV.UG 
INNER JOIN IME ON IUFV.G = IME.UFVG 

電流輸出

________________________________________________________________ 
|Time      LID  LNum  Location Go To| 
|¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯| 
|2012-07-08 10:54:57.837 CCC  CCC111  V   WAIT | 
|2012-07-08 12:15:07.000 CCC  CCC111  Y   GTG | 
|2012-07-17 06:58:33.417 CCC  CCC111  T   WAIT | 
|2012-08-09 03:51:20.750 BBB  BBB222  Y   GTG | 
|2012-08-09 04:06:13.473 BBB  BBB222  Y   GTG | 
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯ 

所需的輸出

________________________________________________________________ 
|Time      LID  LNum  Location Go To| 
|¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯| 
|2012-07-17 06:58:33.417 CCC  CCC111  T   WAIT | 
|2012-08-09 04:06:13.473 BBB  BBB222  Y   GTG | 
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯ 
+0

瞭解IME的表格結構將有所幫助。你需要生成一組數據,其中包含由相關值LID或其他組成的最大時間,或者它是IUFV.G,我不能說。然後按照時間加入,它會排除不需要的記錄。 – xQbert

+0

哪個RDBMS? – Strawberry

回答

1
SELECT 
IME.TP AS [Time], 
IU.FS07 AS [LID], 
IU.I AS [LNum], 
IME.TPL AS [Location], 
(SELECT CASE 
     WHEN IME.TPL = 'Y' 
     THEN 'GTG' 
     ELSE 'WAIT' 
     END) AS [Go To] 

FROM 
IU 
INNER JOIN IUFV ON IU.G = IUFV.UG 
INNER JOIN IME ON IUFV.G = IME.UFVG 
INNER JOIN (Select Max(time) MTime, UFVG from IME 
GROUP BY UFVG) B 
on B.UFVG=IUFV.G 
and B.MTime = IME.Time 

沒有深入剖析,我不知道我是否能消除額外的加盟,只是得到IME的結果擺在首位。但是對TPL的需要可能需要單獨加入

SELECT 
IME.TP AS [Time], 
IU.FS07 AS [LID], 
IU.I AS [LNum], 
IME.TPL AS [Location], 
(SELECT CASE 
     WHEN IME.TPL = 'Y' 
     THEN 'GTG' 
     ELSE 'WAIT' 
     END) AS [Go To] 

FROM 
IU 
INNER JOIN IUFV ON IU.G = IUFV.UG 
INNER JOIN (Select Max(time) MTime, UFVG from IME 
GROUP BY UFVG) B 
on B.UFVG=IUFV.G 
and B.MTime = IME.Time 
+0

第一個代碼適用於LID CCC但不是BBB,BBB行仍然有多個值 – Matt

+0

什麼是從IME中選擇最大(時間)MTime,UFVG GROUP BY UFVG'返回?對於每個獨特的UFVG應該是最長的時間。 LID CCC是否有多個UFVG? – xQbert

+0

而不是有UFVG作爲唯一標識符我可以使用LNUM(IU.I),因爲這也是一個獨特的價值 – Matt

0

以下是基本方法。我假設你在一個組裏沒有重複的時間戳。

select * 
from T 
    inner join (select GrpId, max(TimeStmp) from T group by GrpId) as MaxT 
     on MaxT.GrpId = T.GrpId and T.TimeStmp = MaxT.TimeStmp