【问题标题】:Finding shortest geospatial distance in SQL在 SQL 中查找最短的地理空间距离
【发布时间】:2022-01-10 06:29:09
【问题描述】:

我正在尝试找到这些地方和用户位置之间的最短距离,我有两个表,即:Users_LocationPlaces

用户表:

|------------|------------|------------|
|   user_id  |  latitude  | longitude  |
|------------|------------|------------|
|    1       |  21.89027  | -53.03772  |
|    2       |  23.87847  | -41.78172  |
|    3       |  39.62847  | -80.19892  |
|    4       |  77.87092  | -96.39242  |
|    5       |  17.74962  | -28.56972  |
|------------|------------|------------|

地点表

|--------------|------------|------------|
|    Places    |  latitude  | longitude  |
|--------------|------------|------------|
|  New York    |  72.92629  | -12.89272  |
|  Chicago     |  93.62789  | -83.10172  |
|  Dallas      |  68.92612  | -67.17242  |
|  Cincinnati  |  41.62729  | -37.19067  |
|  Milwaukee   |  86.90617  | -22.82997  |
|  Philadelphia|  38.91682  | -93.90692  |
|--------------|------------|------------|

我想找到用户的经纬度到所有其他地方的短距离。

决赛桌看起来像:

|------------|-----------------|
|   user_id  |  nearest_place  |
|------------|-----------------|
|    1       |    New York     |
|    2       |    Milwaukee    |
|    3       |    Chicago      |
|    4       |    New York     |
|    5       |    Philadelphia |
|------------|-----------------|

我将 Snowflake 用作数据仓库并尝试使用 HAVERSINE 函数来计算地理空间距离。但我不知道如何遍历Places 表中的每个位置以使用 SQL 获得最短距离

【问题讨论】:

    标签: sql snowflake-cloud-data-platform snowflake-schema


    【解决方案1】:

    这应该是离用户最近的城市:

    SELECT u.user_id, p.Places as nearest_place, 
        haversine( u.latitude, u.longitude, p.latitude, p.longitude) as distance
        FROM  users u, places p
        qualify row_number() over (partition by user_id order by distance) = 1;
    

    【讨论】:

    • 上述查询中是否可以使用Where子句?
    • 是的,我们可以在qualify之前和from子句之后使用where子句
    猜你喜欢
    • 2022-01-10
    • 2018-03-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-21
    • 1970-01-01
    • 2013-07-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多