這與Compute dates and durations in mysql query類似,不同的是我沒有唯一的ID列來處理,並且我有樣本不是開始/結束點。SQL將採樣點轉換爲持續時間
作爲一個有趣的實驗,我將cron設置爲ps aux > 'date +%Y-%m-%d_%H-%M'.txt
。我現在有大約250,000個「機器運行的東西」的樣本。
我想將它變成「process | cmd | start | stop」的列表。假設一個'開始'事件是這對存在的第一次,一個'停止'事件是它停止存在的第一個樣本:樣本沒有機會「丟失」或任何東西。
也就是說,進行這種轉換有什麼方法,最好使用SQL(因爲我喜歡SQL,這看起來像一個很好的挑戰)。假設pid不能重複,這是一項微不足道的任務(將所有內容放在表格中,SELECT MIN(time), MAX(time), pid GROUP BY pid
)。然而,由於PID/CMD對重複(我檢查,有重複),我需要一個真正的「找到所有連續段」搜索的方法。
如果有必要,我可以做形式
Load file0 -> oldList
ForEach fileN:
Load fileN ->newList
oldList-newList = closedN
newList-oldList = openedN
oldList=newList
的東西,但是不是SQL而不是有趣。誰知道呢,我最終可能會得到真正的SQL數據來處理這個屬性。
我在想什麼,一個人先構建一個diff表,然後加入所有的close對所有open並在每次打開後拉最小距離close,但我想知道是否有更好的方法。