2014-07-17 64 views
1

我試圖創建一個包含2個coloumns,一個PatrolID和一個代表巡邏長度的數值的視圖(在幾分鐘內)。巡檢被標記爲具有變量PATROL_STARTED和PATROL_FINISHED的TYPE類型中的開始。這些時間在帶有時間戳(日期時間)的發生日期顏色中記錄。我需要使用DATEDIFF獲取路由巡邏的開始和結束之間的分鐘差異

我曾嘗試以下,但它似乎不希望工作:

CREATE VIEW RouteDurations AS 
SELECT PatrolID, 
     DATEDIFF(mi, MAX(CASE WHEN ACTION="PATROL_FINISH" THEN [Occurrence Date] END), 
       MIN(CASE WHEN ACTION="PATROL_START" THEN [Occurrence Date] END) 
       ) AS Duration 
FROM [Data Import] AS t 
GROUP BY PatrolID 

我不能爲我的生活工作爲什麼不呢?任何人都挑選了什麼?

+0

「似乎不想工作」是一個非常糟糕的描述,據我所知,這應該產生*錯誤信息*。如果您有錯誤,請在您的問題中包含錯誤文本。這對你來說可能沒有多大意義,但對於那些回答你的問題的人或尋找這些問題的人來說,這可能意義重大。 –

+0

我是新來的SQL和我運行這個平臺不是傳統的(不公開),所以錯誤消息並不普遍流行。儘管我會嘗試獲取錯誤信息,但請同意。 –

+0

@戈登拿起 –

回答

2

SQL Server不使用雙引號字符串。試試這個:

SELECT PatrolID, 
     DATEDIFF(minute, 
       MIN(CASE WHEN ACTION = 'PATROL_STARTED' THEN [Occurrence Date] END), 
       MAX(CASE WHEN ACTION = 'PATROL_FINISHED' THEN [Occurrence Date] END) 
       ) AS Duration 
FROM [Data Import] AS t 
GROUP BY PatrolID; 

此外,參數datediff()首先開始日期,然後結束日期。

+0

我試過了(使用我的正確顏色),但它在持續時間顏色中給出了僅空值的輸出,沒有實際數量? –

+0

根據文字,字符串應該是PATROL_START ** ED **'和PATROL_END ** ED **。 –

+0

在查詢中進行了更改,並且仍然爲持續時間窗口中的所有值返回null。也產生了警告:「空值被聚合或其他SET操作消除」。這可能是因爲一些巡邏隊員沒有在我的數據集中使用「patrol_finish」時間戳(即保持不完整)嗎? –

0

您可能想要自行加入。像這樣:

select p1.patrolID, 
datediff(mi, p1.[Occurrence Date], p2.[Occurrence Date]) minutes 
from [Data Import] p1 join [Data Import] p2 
on p1.patrolID = p2.patrolID 
and p1.action = 'PATROL_START' 
and p2.action = 'PATROL_FINISH' 
where p1.patrolID = something 
+0

以下的第一個錯誤嗯......我該怎麼處理這件事? –

+0

已經運行這個刪除where子句幷包括一個'Group By p1。[巡迴ID],p1。[發生日期],p2。[發生日期];'在最後我創建一個視圖,但我只是收到空白值,很像第一個答案 –

相關問題