大家好,现在我遇到一个关于经纬度分组的SQL不会写,请各位大神相助呀!
问题:现在有一堆带有经纬度的数据,想要将一周内、500米范围内的点合并,符合条件的只列出时间上最近的一个点,如果在该范围内的点已经计算过,那么不再参与运算,避免出现重复运算或者死循环的情况。样板数据如下:
ID TIME_ID DAY_ID LON LAT
20130314102023 03:14:50:052 20130101 116.700198648649 39.5366507207207
20130314102023 03:15:04:227 20130102 116.700447787356 39.5349353735632
20130314102023 03:14:49:537 20130101 116.700191441441 39.5367056756757
20130314102023 03:14:54:232 20130102 116.700255625 39.5362435416667
20130314102023 03:14:46:475 20130101 116.700150689655 39.5370101149425
20130314102023 03:14:49:757 20130103 116.700191960784 39.5367017156863
20130314102023 03:14:51:433 20130101 116.700216666667 39.53651
最后要的数据可能是(NUM表示相同个数):
ID TIME_ID DAY_ID LON LAT NUM
20130314102023 03:15:04:227 20130102 116.700447787356 39.5349353735632 4
20130314102023 03:14:49:757 20130103 116.700191960784 39.5367017156863 3
计算的结果是20130102包含4个符合的点,所以其他三个被合并,而日期上20130102大于其他的日期,所以才有最后的结果。SQL经纬度分组

解决方案 »

  1.   

    create table T_LU
    (
    ID NUMBER,
    TIME_ID NVARCHAR2(100),
    DAY_ID NUMBER,
    LON NVARCHAR2(100),
    LAT NVARCHAR2(100)
    );
    insert into T_LU values(20130314102023,'03:14:50:052',20130101,'116.700198648649','39.5366507207207');
    COMMIT;
    insert into T_LU values(20130314102023,'03:15:04:227',20130102,'116.700447787356','39.5349353735632');
    COMMIT;
    insert into T_LU values(20130314102023,'03:14:49:537',20130101,'116.700191441441','39.5367056756757');
    COMMIT;
    insert into T_LU values(20130314102023,'03:14:54:232',20130102,'116.700255625','39.5362435416667');
    COMMIT;
    insert into T_LU values(20130314102023,'03:14:46:475',20130101,'116.700150689655','39.5370101149425');
    COMMIT;
    insert into T_LU values(20130314102023,'03:14:49:757',20130103,'116.700191960784','39.5367017156863');
    COMMIT;
    insert into T_LU values(20130314102023,'03:14:51:433',20130101,'116.700216666667','39.53651');
    COMMIT;