我有一个gps数据表:
lat, lon, timestamp
Run Code Online (Sandbox Code Playgroud)
我的查询按时间戳窗口选择:
SELECT * FROM gps WHERE timesamp >= '2016-12-12T02:00:00Z' AND timestamp <= '2016-12-12T03:00:00Z'
Run Code Online (Sandbox Code Playgroud)
对于较大的时间跨度,结果集变得很大,我想限制结果集的大小.但是,我仍然希望数据覆盖整个时间跨度,但分辨率会降低.而不是
LIMIT 1000
Run Code Online (Sandbox Code Playgroud)
我想根据指定的最大结果集大小和数据的实际大小(计数)选择每个第n个元素.
我想要这样的东西
limit = 1000
totalCount = SELECT COUNT(*) FROM gps WHERE timestamp >= ...
resolution = totalCount / limit
SELECT every resolution'th FROM SELECT * FROM gps WHERE timestamp >= ...
Run Code Online (Sandbox Code Playgroud)
使用ROW_NUMBER():
SELECT s.* FROM (
SELECT t.*,
ROW_NUMBER() OVER(ORDER BY t.timestamp) as rnk,
COUNT(*) OVER() as total_cnt
FROM gps t
WHERE t.timestamp between '2016-12-12T02:00:00Z' AND '2016-12-12T03:00:00Z') s
WHERE MOD(s.rnk,(total_cnt/1000)) = 0
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
346 次 |
| 最近记录: |