From: | Martijn van Oosterhout <kleptog(at)svana(dot)org> |
---|---|
To: | Tino Wildenhain <tino(at)wildenhain(dot)de> |
Cc: | Alex Rice <alex_rice(at)arc(dot)to>, pgsql-general(at)postgresql(dot)org |
Subject: | Re: find overlapping address ranges |
Date: | 2002-09-17 02:18:43 |
Message-ID: | 20020917121843.A19764@svana.org |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-general |
On Mon, Sep 16, 2002 at 09:45:46PM +0200, Tino Wildenhain wrote:
> Hi Alex,
>
> if I understand your problem correctly, a so called self-join
> is what you need here.
>
> This looks like this:
>
> select c1.gid, c1.street, ... from cityplus c1, cityplus c2
> where SOME_OVERLAPPING_CONDITION(c1..., c2...)
Probably something like:
a.streetname = b.streetname
and a.numhigh > b.numlow
and a.numlow < b.numhigh
> The trick is to join your table with it self like with another
> table and use the common syntax to compare your rows.
> Note you probably get your results twice, if your
> overlap-condition is commutable, e.g. overlap(c1,c2) is
> the same as overlap(c2,c1). In this case, DISTINCT is your friend.
Or you can make the operation non-commutable by using:
a.addressid < b.addressid
This will halve the number of comparison required.
> --On Montag, 16. September 2002 13:21 -0600 Alex Rice <alex_rice(at)arc(dot)to>
> wrote:
>
> > This is more of a SQL question than a pgsql question. I know this should
> > not be hard, I just can't wrap my mind around it. Thanks...
> >
> > So I have a table with street names and address ranges. Some of the
> > address ranges overlap for the same street ranges, and I need to write a
> > report on those rows. In other words, I want to do something similar to
> > this:
> >
> > SELECT gid, street, fromleft, toleft, fromright, toright
> > FROm cityplus WHERE
> > HAS_OVERLAPPING_ADDRESS_RANGE_FOR_SAME_STREETNAME()
> > ORDER BY street
> >
> > Does this require a subselect? Stored procedure? Neither? Can I use a
> > pgsql line geometric type to check for overlap? This data is in Postgis
> > as well, so I have those methods at my disposal as well.
> >
> >
> > Table "cityplus"
> > Column | Type | Modifiers
> > ------------+-------------------+-----------
> > gid | integer |
> > street | character varying |
> > fromleft | integer |
> > toleft | integer |
> > fromright | integer |
> > toright | integer |
> > fnode_ | integer |
> > tnode_ | integer |
> > lpoly_ | integer |
> > rpoly_ | integer |
> > length | double precision |
> > netcurr_ | integer |
> > netcurr_id | integer |
> > l_low | integer |
> > l_high | integer |
> > r_low | integer |
> > r_high | integer |
> > str | character varying |
> > dgn | character varying |
> > q | character varying |
> > stanno | character varying |
> > code | integer |
> > the_geom | geometry |
> > Indexes: cityplus_addnum_index,
> > cityplus_geom_index,
> > cityplus_gid_index,
> > cityplus_oid_index
> > Check constraints: "$1" (srid(the_geom) = -1)
> > "$2" ((geometrytype(the_geom) =
> > 'MULTILINESTRING'::text) OR ( the_geom IS NULL))
> >
> >
> > Alex Rice
> > Mindlube Software
> > http://mindlube.com/
> >
> >
> > ---------------------------(end of broadcast)---------------------------
> > TIP 1: subscribe and unsubscribe commands go to majordomo(at)postgresql(dot)org
>
>
>
> ---------------------------(end of broadcast)---------------------------
> TIP 3: if posting/reading through Usenet, please send an appropriate
> subscribe-nomail command to majordomo(at)postgresql(dot)org so that your
> message can get through to the mailing list cleanly
--
Martijn van Oosterhout <kleptog(at)svana(dot)org> http://svana.org/kleptog/
> There are 10 kinds of people in the world, those that can do binary
> arithmetic and those that can't.
From | Date | Subject | |
---|---|---|---|
Next Message | Bruce Momjian | 2002-09-17 06:11:41 | Open Source Database article |
Previous Message | Bruce Momjian | 2002-09-17 01:56:37 | Re: pg_proc and pg_type |