2015-04-02 111 views
0

我正在處理一個有多臺機器寫入數據庫的數據庫,每臺機器都由一個名爲ControllerID的列標識,因此例如,一臺機器的控制器ID可以是20,一個可以是30分機sql server query multiple with

我想要做的是爲每臺機器獲取上次閱讀和現在之間的經過時間。這是我目前有:

SELECT  TOP (1) controllerID, convert(Datetime,ReaderTime), DATEDIFF(SECOND,dtReading,GETDATE()) 
FROM   ReaderData 
WHERE  (controllerID = '30') AND (CardID = 'FFFFFFF0 ') 
ORDER BY ReaderIndex DESC 

這得到最後的閱讀和現在之間所經過的秒,但如果我把AND(controllerID =「另一個ID」)顯然是不會工作的和OR也不起作用因爲它只是選擇最後一個,我怎麼能做到這一點?

回答

1

如果正確地理解你的目標,你需要像

select 
    controllerID, 
    max(convert(datetime, ReaderTime)), 
    datediff(ss, max(dtReading), getdate()) 
from ReaderData 
where CardID = 'FFFFFFF0 ' 
group by controllerID 

這將會給您提供有關過去的ReaderTime和差異從去年dtReading到現在每個controllerID

UPDATE:

在一個側面說明,如果我想在過去的2個記錄比較每個controllerID我怎麼能做到這一點...

那麼,作爲「快速和骯髒「解決方案,你不能做以下:從以前的查詢結果和這樣的外部應用通過以前的時間間隔記錄:

select 
    T.controllerID, 
    datediff(ss, T.Max_dtReading, T1.Max_dtReading) 
from 
    (
     select 
      controllerID, 
      max(dtReading) as Max_dtReading 
     from ReaderData 
     where CardID = 'FFFFFFF0 ' 
     group by controllerID 
    ) as T 
    outer apply(
     select max(T1.dtReading) as Max_dtReading 
     from ReaderData as T1 
     where 
      T1.CardID = 'FFFFFFF0 ' 
      and T1.controllerID = T.controllerID 
      and T1.dtReading < T.Max_dtReading 
    ) as T1 
+0

完美的作品謝謝你,在一個側面說明,如果我想在過去的2個記錄比較每個controllerID我怎麼能做到這一點,所以DtReading從最後一個記錄減去Dtreading從記錄之前,獲取記錄之間的經過時間? – 2015-04-02 15:20:13

+0

@JoshKirkpatrick查看更新的答案。 – 2015-04-02 16:07:18

0

如果您想按照我認爲您所使用的方式使用OR,您需要按以下方式將()中的OR分組。

 SELECT  TOP (2) controllerID, convert(Datetime,ReaderTime), DATEDIFF(SECOND,dtReading,GETDATE()) 
     FROM   ReaderData 
     WHERE  (controllerID = '30' OR controllerID = '31' OR controllerID = '32') AND CardID = 'FFFFFFF0 ' 
     ORDER BY ReaderIndex DESC 
GROUP BY ControllerID 
0

你想使用IN()?

SELECT  TOP (1) controllerID, convert(Datetime,ReaderTime), DATEDIFF(SECOND,dtReading,GETDATE()) 
FROM   ReaderData 
WHERE  (controllerID in('30','26')) AND (CardID = 'FFFFFFF0 ') 
ORDER BY ReaderIndex DESC