Ade*_*újo 9 postgresql aggregate greatest-n-per-group postgresql-9.4
使用 PostgreSQL 9.4,我想要一个只考虑min()距离 onJOIN或 的(所有聚合函数)值的结果WHERE。但似乎这些事情是不允许的。所以,我选择两点之间的距离,我想过滤它只是为了考虑这些min()值。
为了清楚地继续这个问题,假设这些行:
id; gid; distance; time_interval
142; 028; 62; "21:46:00"
200; 028; 53; "08:20:11"
128; 034; 92; "09:24:43"
179; 034; 70; "08:09:34"
194; 034; 92; "05:31:05"
199; 034; 88; "07:15:48"
200; 034; 61; "14:13:43"
202; 035; 24; "17:32:34"
200; 036; 76; "06:02:11"
154; 037; 97; "12:58:58"
154; 040; 30; "11:34:10"
132; 042; 80; "07:01:12"
142; 042; 67; "19:30:21"
Run Code Online (Sandbox Code Playgroud)
我怎样才能提取id, gid,distance和time_interval只考虑min(time_interval)与那个相对应的值gid。问题是我只能通过这个查询看到这一点:
SELECT id, gid, distance , min(time_interval)
FROM dis
WHERE time_interval = min(time_interval)
GROUP BY id, gid, distance
Run Code Online (Sandbox Code Playgroud)
结果应该是:
id; gid; distance; time_interval
200; 028; 53; "08:20:11"
194; 034; 92; "05:31:05"
202; 035; 24; "17:32:34"
200; 036; 76; "06:02:11"
154; 037; 97; "12:58:58"
154; 040; 30; "11:34:10"
132; 042; 80; "07:01:12"
Run Code Online (Sandbox Code Playgroud)
Erw*_*ter 10
使用DISTINCT ON:
SELECT DISTINCT ON (gid)
id, gid, distance, time_interval
FROM dis
WHERE time > 0 -- filtered just to take positive values (orig. Q)
ORDER BY gid, time_interval; -- optionally more expressions to break ties
Run Code Online (Sandbox Code Playgroud)
细节:
| 归档时间: |
|
| 查看次数: |
10358 次 |
| 最近记录: |