0

MySQL には次のような SQL テーブルがあります。

id  technician_id  actionDate  station_id
1     10           1317909863      1
2     10           1317909864      1
3     10           1317909865      1
4     10           1317909866      2
5     10           1317909867      2
6     10           1317909868      2
7     10           1317909869      2
8     10           1317909870      2
9     10           1317909871      3
10    10           1317909872      1
11    10           1317909873      1

このデータは、現場の技術者を追跡するためのものです。id 列は自動インクリメント キーです。actionDate 列は 1970 年からの秒数で、station_id は技術者がアクションを実行しているフィールドのステーションの ID です。

このデータからいくつかの「統計」を判断したいと思います。たとえば、技術者が行ったルートを特定したいと思います (ステーション 1 から 2 に移動し、次に 2 から 3 に移動し、3 から 1 に戻ってきました)。また、彼が駅に行くたびに費やした時間を特定したいと考えています (例: 彼は駅 1 に行き、3 分間滞在し、その後 30 分間車で駅 2 に行き、15 分間滞在してから車に乗りました。 20 分で 3 駅に行き、10 分滞在して 1) に戻りました)。

おわかりのように、これは追跡システムです。actionDate で並べ替えてから、station_id でグループ化する必要があります。ただし、一部のステーションは技術者が複数回訪問できるため、その列でグループ化することはできません。

ポインタはありますか?

私はこれを持っていましたが、同じstation_idを持つすべての行を再グループ化します:

select station_id, min(actionDate), max(actionDate) 
from Action
where technician_id = 10
group by station_id
order by actionDate;
4

2 に答える 2

1

カーソルをすすめるのは嫌いですが、それを見ると候補のようです。カーソルはそのデータを1回圧縮して、一時テーブルにデータを入力します。

私は、重複する時間範囲などを探すために同様の問題に多くの時間を費やしてきましたが、カーソルを実行する方がより適切で高速なオプションである場合があることに気付きました。

多分ここの誰かが他のことを提案することができます...

例が必要な場合はお知らせください。

于 2012-04-16T20:06:22.113 に答える
0

これはmssqlの方が簡単ですが、この記事が役立つかもしれません、http://www.explodybits.com/2011/11/mysql-row-number/

最初の部分では、行番号がステーションIDで1分割されているクエリが必要です。

于 2012-04-16T20:25:13.983 に答える