我有一個表items
它代表移動的項目。其中,該表中有PK name
,其中包含了創建條目和字符串type
的時間,這可以是start
,move
或end
與move
條目來插圖中start
和end
時間戳creation_time
。通過額外的約束獲得連續時間戳中最大的區別?
表的一部分可能看起來像這樣:
name creation_time type
_________________________________
i1 2017-03-01 10:00:01 start
i1 2017-03-01 10:00:02 move
i1 2017-03-01 10:00:08 move
i1 2017-03-01 10:00:10 end
i1 2017-03-01 10:00:31 start
i1 2017-03-01 10:00:33 move
i1 2017-03-01 10:00:37 end
我想要得到的是連續的時間戳的最大區別(S),其中第二時間戳的類型不是start
(我不照顧end
和start
之間的時間)。
基於this SO question我來用下面的查詢這還沒有考慮到的條目類型:
select name, creation, next_creation, (next_creation-creation) difference from (
select name, creation, (
select min(creation) from items i2
where i2.name=i.name
and i2.creation > i.creation
) as next_creation
from items i
)
where (next_creation-creation) is not null
order by difference desc
我的問題是,我不知道如何正確地過濾了現在鍵入。據我的理解,我必須從最內層的查詢中獲取類型,因爲我關心第二項的類型,然後將and type<>'start'
添加到最外層查詢的where子句中 - 但我無法從中獲取兩個值子查詢,對嗎?
編輯:我希望是這樣的結果:
name creation next_creation difference action
i1 2017-03-01 10:00:02 2017-03-01 10:00:08 6s move
i1 2017-03-01 10:00:33 2017-03-01 10:00:37 4s end
[...]
正如你看到的,對於第一end
和第二start
之間的時間沒有進入,這就是要通過過濾來實現方式。
例如,在第一次和最後一次輸入之間的時間也沒有輸入,因爲我想要連續輸入之間的差異。
請告訴我們查詢的最終結果應該是什麼樣子等。 –
您需要每個名稱值的最大差異? – Mikhail