V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Jolly23
V2EX  ›  PostgreSQL

做地理数据分析,求助大家关于一条比较复杂的 SQL 写法

  •  
  •   Jolly23 · 2017-09-14 16:50:50 +08:00 · 1871 次点击
    这是一个创建于 2655 天前的主题,其中的信息可能已经有所发展或是发生改变。

    首先有一张表 POINTS

    地理数据结构如下

    | USERID | TIME | GPS |

    | ------------- | ------------- |

    | 用户 A | sometime | (x,y) |

    | 用户 A | sometime | (x,y) |

    | 用户 A | sometime | (x,y) |

    | 用户 A | sometime | (x,y) |

    | 用户 A | sometime | (x,y) |

    | 用户 B | sometime | (x,y) |

    | 用户 B | sometime | (x,y) |

    | 用户 B | sometime | (x,y) |

    | 用户 C | sometime | (x,y) |

    | 用户 C | sometime | (x,y) |

    | 用户 D | sometime | (x,y) |

    | 用户 D | sometime | (x,y) |

    最终想要的出的结果

    | USERID | TIME_1 | TIME_2 | FARTHEST | USER_DATA_COUNT |

    | ------------- | ------------- |------------- |------------- |------------- |

    | 用户 D | 用户 D 最远的两个点点 1 的时间 | 用户 D 最远的两个点点 2 的时间 | 3900 | 2 |

    | 用户 A | 用户 A 最远的两个点点 1 的时间 | 用户 A 最远的两个点点 2 的时间 | 3200 | 5 |

    | 用户 C | 用户 C 最远的两个点点 1 的时间 | 用户 C 最远的两个点点 2 的时间 | 1900 | 2 |

    | 用户 B | 用户 B 最远的两个点点 1 的时间 | 用户 B 最远的两个点点 2 的时间 | 1400 | 3 |

    我想拿出每一个用户距离自己的最远距离

    FARTHEST:假设 dist((x1,y1), (x2,y2)) 即可得出距离

    USER_DATA_COUNT:当前用户的数据数量

    最终根据 FARTHEST 个人迁徙最远距离由高到低排序

    思路分解

    全部用户 ID:SELECT USERID from POINTS group by USERID

    个人数据量:SELECT USERID, count(*) from POINTS group by USERID

    	-- 这个是错的,得不到想要的结果,所以来这里问大家
        SELECT
            POINTS1.USERID,
            POINTS1.TIME AS time_1,
            POINTS2.TIME AS time_2,
            dist(POINTS1.GPS, POINTS2.GPS)
        FROM
            POINTS POINTS1,
            POINTS POINTS2
        WHERE
            POINTS1.USERID = POINTS2.USERID
        ORDER BY
            dist(POINTS1.GPS, POINTS2.GPS) DESC
    

    项目用到了 PostgreSQL 的 PostGIS 这个扩展,具有此地理距离计算能力

    1 条回复    2017-09-14 20:39:14 +08:00
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2367 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 32ms · UTC 02:22 · PVG 10:22 · LAX 18:22 · JFK 21:22
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.