SQL根据总数选择每个第x行

Chr*_*ris 4 sql postgresql

我有一个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)

sag*_*agi 6

使用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)