我遇到的問題是我有一個資料表,它每秒添加一個新行(想象一下結構 {id, timestamp(datetime), value})。我想對 MSSQL 執行單個查詢以遍歷表并僅輸出每分鐘具有前 2 個值 asc 的物件數(也輸出)。
請問有什么想法嗎?
樣本資料:
1 2015-01-01 00:00:00 128
2 2015-01-01 00:00:01 128
3 2015-01-01 00:00:04 129
4 2015-01-01 00:00:05 123
...
67 2015-01-01 00:00:59 128
Output :
starttime endtime number
2015-01-01 00:00:00 2015-01-01 00:00:59 4
uj5u.com熱心網友回復:
正如@ZoharPeled 在評論中提到的,您可以使用DATEDIFF和DATEADD按分鐘進行磁區。然后使用DENSE_RANK取前兩個value結果。
SELECT
t.StartTime,
EndTime = DATEADD(second, 59, t.StartTime),
number = COUNT(*)
FROM (
SELECT *,
rn = DENSE_RANK() OVER (PARTITION BY v.StartTime ORDER BY t.value DESC)
FROM YourTable t
CROSS APPLY (VALUES (
DATEADD(minute, DATEDIFF(minute, '20000101', t.timestamp), '20000101')
)) v(StartTime)
) t
WHERE rn <= 2
GROUP BY
t.StartTime;
資料庫<>小提琴
uj5u.com熱心網友回復:
一個簡單的方法是將日期修剪到分鐘,然后將其粘貼到臨時表中,然后從臨時組中選擇 max(value), [date stripped down to the minute] [date stripped down to the minute] .
這是一種簡單的方法,當您問這個問題時,我假設您想要一個易于理解的解決方案。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/363571.html
標籤:sql sql-server 约会时间
上一篇:Pandas:不同長度的兩個系列之間的差異(未對齊的索引)
下一篇:根據序列號和故障標簽定義故障范圍
