Re: DISTINCT ON con columna hstore

Lists: ecpug
From: Tonny <tonny(dot)lists(at)gmail(dot)com>
To: ecpug(at)postgresql(dot)org
Subject: DISTINCT ON con columna hstore
Date: 2013-01-21 21:42:57
Message-ID: 50FDB661.2090104@gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: ecpug

SELECT DISTINCT ON (tags->'name') tags->'name' AS nombre, columna2,
columna3 FROM tabla1;

Hola a todos.
Como puedo hacer un distinct ON, solo de un atributo de un campo hstore

gracias


From: Jaime Casanova <jaime(at)2ndquadrant(dot)com>
To: Tonny <tonny(dot)lists(at)gmail(dot)com>
Cc: Foros Postgre Ecuador <ecpug(at)postgresql(dot)org>
Subject: Re: DISTINCT ON con columna hstore
Date: 2013-01-21 22:18:13
Message-ID: CAJKUy5jWzfK8-Q20nPzMbWQ=c0x12fXO8beDXurVVG3AW1CHrw@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: ecpug

2013/1/21 Tonny <tonny(dot)lists(at)gmail(dot)com>:
> SELECT DISTINCT ON (tags->'name') tags->'name' AS nombre, columna2, columna3
> FROM tabla1;
>
> Hola a todos.
> Como puedo hacer un distinct ON, solo de un atributo de un campo hstore
>

mmm... interesante, parece que en ese caso debes filtrar los valores nulos

SELECT DISTINCT ON (tags->'name') tags->'name' AS nombre, columna2, columna3
FROM tabla1
WHERE (tags->'name') IS NOT NULL;

En realidad tiene sentido, tags->'name' devuelve nulo si en el hstore
no esta el campo 'name' y como siempre se cumple que NULL <> NULL el
opina que la expresión es distinta en cada registro y lo muestra.

--
Jaime Casanova www.2ndQuadrant.com
Professional PostgreSQL: Soporte 24x7 y capacitación
Phone: +593 4 5107566 Cell: +593 987171157


From: Jaime Casanova <jaime(at)2ndquadrant(dot)com>
To: Foros Postgre Ecuador <ecpug(at)postgresql(dot)org>
Subject: Fwd: DISTINCT ON con columna hstore
Date: 2013-05-17 23:36:39
Message-ID: CAJKUy5hASgb09FL2Y6oDsohztoZ8F3CFeomzKPhABFucZo-AFg@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: ecpug

Saludos,

Acabo de notar que Tonny no envio su resolución al foro, lo que
significa que nadie se beneficio de su solución... mal Tonny, muy
mal...

---------- Forwarded message ----------
From: Tonny <tonny(dot)lists(at)gmail(dot)com>
Date: 2013/1/24
Subject: Re: [ecpug] DISTINCT ON con columna hstore
To: Jaime Casanova <jaime(at)2ndquadrant(dot)com>

On 01/21/2013 05:18 PM, Jaime Casanova wrote:
>
> 2013/1/21 Tonny <tonny(dot)lists(at)gmail(dot)com>:
>>
>> SELECT DISTINCT ON (tags->'name') tags->'name' AS nombre, columna2, columna3
>> FROM tabla1;
>>
>> Hola a todos.
>> Como puedo hacer un distinct ON, solo de un atributo de un campo hstore
>>
> mmm... interesante, parece que en ese caso debes filtrar los valores nulos
>
> SELECT DISTINCT ON (tags->'name') tags->'name' AS nombre, columna2, columna3
> FROM tabla1
> WHERE (tags->'name') IS NOT NULL;
>
>
> En realidad tiene sentido, tags->'name' devuelve nulo si en el hstore
> no esta el campo 'name' y como siempre se cumple que NULL <> NULL el
> opina que la expresión es distinta en cada registro y lo muestra.
>
> --
> Jaime Casanova www.2ndQuadrant.com
> Professional PostgreSQL: Soporte 24x7 y capacitación
> Phone: +593 4 5107566 Cell: +593 987171157

Lo solucioné así no sé como mejorar mas esa consulta :) o ponerla mas clara.

SELECT DISTINCT ON (nombre) nombre, distancia FROM
(
SELECT tags->'name' AS nombre, st_distance(linestring,
ST_GeomFromText('POINT(-78.10563426666833 0.3187742717967793)',4326))
* 111177.473352 as distancia
FROM osm.ways
WHERE exist(tags, 'name') AND exist(tags, 'highway')
ORDER BY distancia
) AS t1
WHERE distancia < 200

--
Jaime Casanova www.2ndQuadrant.com
Professional PostgreSQL: Soporte 24x7 y capacitación
Phone: +593 4 5107566 Cell: +593 987171157


From: Jaime Casanova <jaime(at)2ndquadrant(dot)com>
To: Foros Postgre Ecuador <ecpug(at)postgresql(dot)org>
Subject: Re: DISTINCT ON con columna hstore
Date: 2013-05-17 23:38:57
Message-ID: CAJKUy5hHLH8-eR4Q8xLe5-p68MPoghr=geYrd=TaKStGvL+c2A@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: ecpug

> ---------- Forwarded message ----------
> From: Tonny <tonny(dot)lists(at)gmail(dot)com>
> Date: 2013/1/24
> Subject: Re: [ecpug] DISTINCT ON con columna hstore
> To: Jaime Casanova <jaime(at)2ndquadrant(dot)com>
>
> Lo solucioné así no sé como mejorar mas esa consulta :) o ponerla mas clara.
>
> SELECT DISTINCT ON (nombre) nombre, distancia FROM
> (
> SELECT tags->'name' AS nombre, st_distance(linestring,
> ST_GeomFromText('POINT(-78.10563426666833 0.3187742717967793)',4326))
> * 111177.473352 as distancia
> FROM osm.ways
> WHERE exist(tags, 'name') AND exist(tags, 'highway')
> ORDER BY distancia
> ) AS t1
> WHERE distancia < 200
>
>

Y ya que estamos en eso, puedes usar la función st_dwithin() para solo
obtener los puntos que se encuentran dentro de 200m... y esa función
puede aprovechar los índices.

http://postgis.org/docs/ST_DWithin.html

--
Jaime Casanova www.2ndQuadrant.com
Professional PostgreSQL: Soporte 24x7 y capacitación
Phone: +593 4 5107566 Cell: +593 987171157


From: Tonny <tonny(dot)lists(at)gmail(dot)com>
To: ecpug(at)postgresql(dot)org
Subject: Re: Fwd: DISTINCT ON con columna hstore
Date: 2013-05-20 04:01:29
Message-ID: 5199A019.3040709@gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: ecpug

On 05/17/2013 06:36 PM, Jaime Casanova wrote:
> Saludos,
>
> Acabo de notar que Tonny no envio su resolución al foro, lo que
> significa que nadie se beneficio de su solución... mal Tonny, muy
> mal...
>
>
> ---------- Forwarded message ----------
> From: Tonny <tonny(dot)lists(at)gmail(dot)com>
> Date: 2013/1/24
> Subject: Re: [ecpug] DISTINCT ON con columna hstore
> To: Jaime Casanova <jaime(at)2ndquadrant(dot)com>
>
>
> On 01/21/2013 05:18 PM, Jaime Casanova wrote:
>> 2013/1/21 Tonny <tonny(dot)lists(at)gmail(dot)com>:
>>> SELECT DISTINCT ON (tags->'name') tags->'name' AS nombre, columna2, columna3
>>> FROM tabla1;
>>>
>>> Hola a todos.
>>> Como puedo hacer un distinct ON, solo de un atributo de un campo hstore
>>>
>> mmm... interesante, parece que en ese caso debes filtrar los valores nulos
>>
>> SELECT DISTINCT ON (tags->'name') tags->'name' AS nombre, columna2, columna3
>> FROM tabla1
>> WHERE (tags->'name') IS NOT NULL;
>>
>>
>> En realidad tiene sentido, tags->'name' devuelve nulo si en el hstore
>> no esta el campo 'name' y como siempre se cumple que NULL <> NULL el
>> opina que la expresión es distinta en cada registro y lo muestra.
>>
>> --
>> Jaime Casanova www.2ndQuadrant.com
>> Professional PostgreSQL: Soporte 24x7 y capacitación
>> Phone: +593 4 5107566 Cell: +593 987171157
>
> Lo solucioné así no sé como mejorar mas esa consulta :) o ponerla mas clara.
>
> SELECT DISTINCT ON (nombre) nombre, distancia FROM
> (
> SELECT tags->'name' AS nombre, st_distance(linestring,
> ST_GeomFromText('POINT(-78.10563426666833 0.3187742717967793)',4326))
> * 111177.473352 as distancia
> FROM osm.ways
> WHERE exist(tags, 'name') AND exist(tags, 'highway')
> ORDER BY distancia
> ) AS t1
> WHERE distancia < 200
>
>
> --
> Jaime Casanova www.2ndQuadrant.com
> Professional PostgreSQL: Soporte 24x7 y capacitación
> Phone: +593 4 5107566 Cell: +593 987171157
>
>

La culpa la tiene la lista que al responder pone al remitente jeje,
tendré cuidado en poner en thunderbird responder a la lista