V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
Jolly23

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

  •  
  •   Jolly23 · Sep 14, 2017 · 2256 views
    This topic created in 3148 days ago, the information mentioned may be changed or developed.

    首先有一张表 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 replies    2017-09-14 20:39:14 +08:00
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   1196 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 40ms · UTC 17:58 · PVG 01:58 · LAX 10:58 · JFK 13:58
    ♥ Do have faith in what you're doing.