【发布时间】:2016-06-25 17:26:34
【问题描述】:
我正在使用智能手机从加速度计收集数据,然后将其保存在服务器中的 postgresql 数据库中。基本上,每次读取加速度计时,我都会保存智能手机当前所处的纬度/经度,以及它发生的时间戳。
现在,我想按照保存时的顺序(按时间戳排序)从数据库中读取每个不同的位置(纬度/经度)。我想知道每个位置重复了多少读数。
让我用一个例子来解释。考虑一下我的数据库中有下表:
+------------+------------+-----------+
| latitude | longitude | timestamp |
+------------+------------+-----------+
| 43.1784771 | -8.5956853 | 930560045 |
| 43.1784771 | -8.5956853 | 930560054 |
| 41.2784813 | -7.5956853 | 930560063 |
| 42.1786173 | -8.5951757 | 930560072 |
| 42.1786173 | -8.5951757 | 930560082 |
+------------+------------+-----------|
请注意,我有按时间戳排序的元素,并且我有 2 个重复的位置。因此,我想查询数据库以查看重复的位置并得到以下结果:
+------------+------------+-------+
| latitude | longitude | count |
+------------+------------+-------+
| 43.1784771 | -8.5956853 | 2 |
| 41.2784813 | -7.5956853 | 1 |
| 42.1786173 | -8.5951757 | 2 |
+------------+------------+-------|
问题是我希望元素按原始表排序(按时间戳排序)。 我正在尝试以下查询,但它不起作用,因为子查询中的顺序无关紧要:
SELECT latitude, longitude, count(*)
FROM
(SELECT latitude, longitude, timestamp FROM table ORDER BY timestamp asc) subquery1
GROUP BY latitude, longitude
我一直在 StackOverflow 中寻找答案,最接近的是这个:Is order in a subquery guaranteed to be preserved? 但是,它不适用于我的情况,因为我需要“group by”子句。谁能帮帮我?
【问题讨论】:
-
SELECT latitude, longitude, count(*) from table GROUP BY latitude, longitude ORDER BY max(timestamp); /* or min(timestamp)*/
标签: sql postgresql group-by sql-order-by