2017-03-08 98 views
1

我的要求流分析查詢

我要計算汽車的時間進入隧道 對於這一點,我有JSON喜歡(我已填充這個JSON到的分析數據輸入工作)

[{ 
    CarId: 1, 
    Time: "2017-03-08T16:20:00.0000000", 
    CarNum: "XYZ" 
},{ 
    CarId: 2, 
    Time: "2017-03-08T16:25:00.0000000", 
    CarNum: "ABC" 
},{ 
    CarId: 1, 
    Time: "2017-03-08T16:27:00.0000000", 
    CarNum: "XYZ" 
},{ 
    CarId: 1, 
    Time: "2017-03-08T16:30:00.0000000", 
    CarNum: "XYZ" 
},{ 
    CarId: 1, 
    Time: "2017-03-08T16:35:00.0000000", 
    CarNum: "XYZ" 
}, 
] 

現在汽車進入隧道的最短時間爲1分鐘,最長時間爲10分鐘。

基於輸入它是CarId 1 2次互訪和0訪問的CarId 2

誰能幫我寫查詢?

回答

1

在您的示例數據中,CarId & CarNum的組合似乎重複。基於Stream Analytics查詢語言(它僅僅是T-SQL的一個子集),您所需要的查詢幾乎無法實現。

根據我的經驗,這裏是我的示例查詢與您的類似的情況。

如果像下面的JSON數據,

[{ 
    CarId: 1, 
    Time: "2017-03-08T16:20:00.0000000", 
    CarNum: "XYZ" 
},{ 
    CarId: 2, 
    Time: "2017-03-08T16:25:00.0000000", 
    CarNum: "ABC" 
},{ 
    CarId: 1, 
    Time: "2017-03-08T16:27:00.0000000", 
    CarNum: "XYZ" 
},{ 
    CarId: 1, 
    Time: "2017-03-08T16:30:00.0000000", 
    CarNum: "DEF" 
},{ 
    CarId: 1, 
    Time: "2017-03-08T16:35:00.0000000", 
    CarNum: "DEF" 
}, 
] 

的結合的CarId & CarNum是在一段時間內唯一的,查詢的分析數據如下。

SELECT 
    CarId, 
    CarNum, 
    LAG(Time, 1) OVER (PARTITION BY CarId, CarNum LIMIT DURATION(MINUTE, 10)) AS startime, 
    Time AS endtime, 
    DATEDIFF(second, LAG(Time, 1) OVER (PARTITION BY CarId, CarNum LIMIT DURATION(MINUTE, 10)), Time) AS time 
FROM 
    [YourInputAlias] 
WHERE LAG(CarId, 1) OVER (PARTITION BY CarId, CarNum limit LIMIT DURATION(MINUTE, 10)) IS NOT NULL 
+0

感謝Peter Pan,該查詢不符合我的要求,但它對我有很大的幫助。 – user3913566