From: | "A(dot) Kretschmer" <andreas(dot)kretschmer(at)schollglas(dot)com> |
---|---|
To: | pgsql-sql(at)postgresql(dot)org, pgsql-novice(at)postgresql(dot)org |
Subject: | Re: [SQL] Select last there dates |
Date: | 2007-06-21 09:50:25 |
Message-ID: | 20070621095025.GG1405@a-kretschmer.de |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-novice pgsql-sql |
am Thu, dem 21.06.2007, um 11:18:13 +0300 mailte Loredana Curugiu folgendes:
> Hello again,
>
> I have the following two tables:
>
> Table 1:
> uid | phone_number |
> -----+-------------------------------
> 8 | +40741775621 |
> 8 | +40741775622 |
> 8 | +40741775623 |
> 9 | +40741775621 |
> 9 | +40741775622 |
> 9 | +40741775623 |
> 10 | +40741775621 |
> 10 | +40741775622 |
> 10 | +40741775623 |
> 7 | +40741775621 |
> 7 | +40741775622 |
> 7 | +40741775623 |
> 11 | +40741775621 |
> 11 | +40741775622 |
> 11 | +40741775623 |
>
> Table2:
>
> uid | phone_number | date
> ---------------+-----------------------+-------------------------------
> 8 | +40741775621 | 2007-06-21 10:40:00+00
> 8 | +40741775621 | 2007-05-21 10:40:00+00
> 8 | +40741775621 | 2007-04-21 10:40:00+00
> 8 | +40741775621 | 2007-03-21 10:40:00+00
> 8 | +40741775621 | 2007-06-20 10:40:00+00
> 8 | +40741775621 | 2007-06-19 10:40:00+00
> 8 | +40741775621 | 2007-06-18 10:40:00+00
> 8 | +40741775622 | 2007-06-16 10:40:00+00
> 8 | +40741775622 | 2007-06-15 10:40:00+00
> 7 | +40741775622 | 2007-06-21 05:54:13.646457+00
> 7 | +40741775621 | 2007-06-21 05:54:21.134469+00
>
>
> For each uid column from table1 I have different values phone_number
> column.
>
> For each uid and phone_number columns from table2 I have different
> values for date column.
>
> My task is to create a query which for a given uid returns all values
> for phone_number column from table1 and last three values of date
> column from table2.
>
> For example, if uid=8 the query should return:
>
> phone_number | date
> -----------------------+------------
> +40741775621 | 2007-06-21, 2007-06-20, 2007-06-19
> +40741775622 | 2007-06-16, 2007-06-15
> +40741775623 |
lets try:
first, i need a comma-aggregat:
CREATE FUNCTION comma_aggregate(text,text) RETURNS text AS '
SELECT CASE WHEN $1 <> '''' THEN $1 || '', '' || $2 ELSE $2 END; '
LANGUAGE sql IMMUTABLE STRICT;
CREATE AGGREGATE comma (basetype=text, sfunc=comma_aggregate, stype=text, initcond='' );
Now your tables, with a typo in the phone_number - column, sorry ;-)
test=*# select * from t1;
uid | phone_numer
-----+-------------
8 | 40741775621
8 | 40741775622
8 | 40741775623
9 | 40741775621
9 | 40741775622
9 | 40741775623
10 | 40741775621
10 | 40741775622
10 | 40741775623
(9 rows)
test=*# select * from t2;
uid | phone_numer | datum
-----+-------------+------------
8 | 40741775621 | 2007-06-21
8 | 40741775621 | 2007-05-21
8 | 40741775621 | 2007-04-21
8 | 40741775621 | 2007-03-21
8 | 40741775621 | 2007-06-20
8 | 40741775621 | 2007-06-19
8 | 40741775621 | 2007-06-18
8 | 40741775622 | 2007-06-16
8 | 40741775622 | 2007-06-15
7 | 40741775622 | 2007-06-21
7 | 40741775621 | 2007-06-21
(11 rows)
And now:
test=*# select t1.phone_numer, substring(comma(t2.datum) from 1 for 34)
from t1 left outer join (select uid, phone_numer, datum from t2 order by
2 ) t2 on (t1.uid,t1.phone_numer)=(t2.uid,t2.phone_numer) where t1.uid=8
group by t1.phone_numer;
phone_numer | substring
-------------+------------------------------------
40741775621 | 2007-06-21, 2007-05-21, 2007-04-21
40741775622 | 2007-06-16, 2007-06-15
40741775623 |
(3 rows)
Perhaps there are better solutions possible...
Andreas
--
Andreas Kretschmer
Kontakt: Heynitz: 035242/47150, D1: 0160/7141639 (mehr: -> Header)
GnuPG-ID: 0x3FFF606C, privat 0x7F4584DA http://wwwkeys.de.pgp.net
From | Date | Subject | |
---|---|---|---|
Next Message | Marcus Engene | 2007-06-21 10:49:15 | stem override, tsearch2 |
Previous Message | Richard Huxton | 2007-06-21 09:18:29 | Re: Select last there dates |
From | Date | Subject | |
---|---|---|---|
Next Message | A. Kretschmer | 2007-06-21 10:04:25 | Re: Results per letter query |
Previous Message | Richard Huxton | 2007-06-21 09:18:29 | Re: Select last there dates |