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 分组。但由于技术人员可以访问超过 1 次的站点,因此无法按该列对其进行分组。

任何指针?

我有这个,但它重新组合了所有具有相同 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

我讨厌推荐游标,但看着它,它似乎是一个候选者。游标可以在该数据中压缩一次,同时填充一个临时表。

我花了很多时间来寻找重叠的时间范围等类似的问题,并且已经意识到在某些情况下运行游标是一个更好更快的选择。

也许这里有人可以提出其他建议......

如果你需要一个例子,请告诉我。

于 2012-04-16T20:06:22.113 回答
0

这在 mssql 中会更容易,但这篇文章可能会有所帮助,http://www.explodybits.com/2011/11/mysql-row-number/

对于您想要查询的第一部分,其中行号是 1 按站 ID 分区。

于 2012-04-16T20:25:13.983 回答