これは、mysqlクエリの日付と期間の計算に似ていますが、使用する一意のID列がなく、開始点/終了点ではないサンプルがある点が異なります。
興味深い実験として、cronをに設定しましたps aux > 'date +%Y-%m-%d_%H-%M'.txt
。現在、「マシンが実行していたもの」のサンプルが約250,000あります。
これを「プロセス|コマンド|開始|停止」のリストに変換したいと思います。'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のテーブルを作成し、次にすべてのクローズをすべてのオープンに対して結合し、オープンするたびに最小距離を閉じるというものを考えていますが、もっと良い方法があるかどうか疑問に思っています。