last and/or first in a by group

Started by Dino Vlietalmost 16 years ago10 messagesgeneral
Jump to latest
#1Dino Vliet
dino_vliet@yahoo.com

Dear postgresql experts,

I want to know if postgresql has facilities for getting the first and or the last in a by group.

Suppose I have the following table:

resnr,dep,arr,cls,dbd meaning reservationsnumber, departure station, arrival station, the class of the reservation and the daysbeforedeparture and records like:
xxx,NYC,BRA,C,80
xxx,NYC,BRA,M,75
xxx,NYC,BRA,Q,50
yyy,WAS,LIS,T,55
zzz,NYC,LIS,Z,40
zzz,NYC,LIS,J,39

I want to select only the most recent records being:
xxx,NYC,BRA,Q,50
yyy,WAS,LIS,T,55
zzz,NYC,LIS,J,39

How would you accomplish this?

I googled and found this:
http://www.postgresonline.com/journal/index.php?/archives/68-More-Aggregate-Fun-Whos-on-First-and-Whos-on-Last.html

I hope there are alternatives because I don't have to program this myself. The other option is that I load this data in SAS and do it there but I only have SAS at work and want to do this at home.

Brgds
Dino

#2Thomas Kellerer
spam_eater@gmx.net
In reply to: Dino Vliet (#1)
Re: last and/or first in a by group

Dino Vliet wrote on 16.05.2010 18:07:

Dear postgresql experts,

I want to know if postgresql has facilities for getting the first and or
the last in a by group.

Suppose I have the following table:

resnr,dep,arr,cls,dbd meaning reservationsnumber, departure station,
arrival station, the class of the reservation and the
daysbeforedeparture and records like:
xxx,NYC,BRA,C,80
xxx,NYC,BRA,M,75
xxx,NYC,BRA,Q,50
yyy,WAS,LIS,T,55
zzz,NYC,LIS,Z,40
zzz,NYC,LIS,J,39

I want to select only the most recent records being:
xxx,NYC,BRA,Q,50
yyy,WAS,LIS,T,55
zzz,NYC,LIS,J,39

Something like this?

SELECT *
FROM your_table t1
WHERE dbd = (SELECT min(dbd)
FROM your_table t2
WHERE t2.dep = t1.dep
AND t2.arr = t1.arr
AND t2.resnr = t1.resnr)

Regards
Thomas

#3Tim Landscheidt
tim@tim-landscheidt.de
In reply to: Dino Vliet (#1)
Re: last and/or first in a by group

Dino Vliet <dino_vliet@yahoo.com> wrote:

I want to know if postgresql has facilities for getting the first and or the last in a by group.

Suppose I have the following table:

resnr,dep,arr,cls,dbd meaning reservationsnumber, departure station, arrival station, the class of the reservation and the daysbeforedeparture and records like:
xxx,NYC,BRA,C,80
xxx,NYC,BRA,M,75
xxx,NYC,BRA,Q,50
yyy,WAS,LIS,T,55
zzz,NYC,LIS,Z,40
zzz,NYC,LIS,J,39

I want to select only the most recent records being:
xxx,NYC,BRA,Q,50
yyy,WAS,LIS,T,55
zzz,NYC,LIS,J,39

How would you accomplish this?

I googled and found this:
http://www.postgresonline.com/journal/index.php?/archives/68-More-Aggregate-Fun-Whos-on-First-and-Whos-on-Last.html

I hope there are alternatives because I don't have to program this myself. The other option is that I load this data in SAS and do it there but I only have SAS at work and want to do this at home.

You can either use window functions in PostgreSQL 8.4 (cf.
"FIRST_VALUE() OVER (...)"/"LAST_VALUE() OVER (...)") or use
the "DISTINCT ON" syntax:

| tim=# SELECT DISTINCT ON (resnr) resnr, dep, arr, cls, dbd FROM TestTable ORDER BY resnr, dbd;
| resnr | dep | arr | cls | dbd
| -------+-----+-----+-----+-----
| xxx | NYC | BRA | Q | 50
| yyy | WAS | LIS | T | 55
| zzz | NYC | LIS | J | 39
| (3 Zeilen)

| tim=#

Tim

#4Dino Vliet
dino_vliet@yahoo.com
In reply to: Tim Landscheidt (#3)
Re: last and/or first in a by group

From:
"Thomas Kellerer" <spam_eater@gmx.net>
To:
"" <pgsql-general@postgresql.org>Dino Vliet wrote on 16.05.2010 18:07:

Dear postgresql experts,

I want to know

if postgresql has facilities for getting the first and or

the

last in a by group.

Suppose I have the following table:

resnr,dep,arr,cls,dbd meaning reservationsnumber, departure station,
arrival station, the class of the reservation and the

daysbeforedeparture and records like:

xxx,NYC,BRA,C,80

xxx,NYC,BRA,M,75

xxx,NYC,BRA,Q,50
yyy,WAS,LIS,T,55
zzz,NYC,LIS,Z,40
zzz,NYC,LIS,J,39

I want to

select only the most recent records being:

xxx,NYC,BRA,Q,50
yyy,WAS,LIS,T,55
zzz,NYC,LIS,J,39

Something like this?

SELECT *
FROM your_table t1
WHERE dbd = (SELECT
min(dbd)
FROM your_table t2
WHERE
t2.dep = t1.dep
AND t2.arr = t1.arr
AND t2.resnr = t1.resnr)

Regards
Thomas

****************

Thanks for your answer and if I look at it from a functionality point of view, this does the trick.

However, my table t1 (and hence t2) contains 6 million records AND I'm planning to do this repeatedly (with a scripting language for various moments in time) so this will end up being a very slow solution.

How can I speed these kind of queries up? By using indices, but on what columns would that be the best way then?
Or by trying to do this one time by constructing a table with the relevant information which can be used in such a way that I join thing in stead of using this subquery construction.

Thanks
Dino

#5Malm Paul
paul.malm@saabgroup.com
In reply to: Dino Vliet (#4)
uppdate from postgersql 8.3.7 to 8.4.4

Hi,
I'm trying to update postgresql ver 8.7.3 to 8.4.4
At the end of the installation when trying to styart the database server.... I get the following error meassage: "Problem running post-install step. Installation may not complete correctly. Failed to start the database server"

And when I try to start the server manually I get the following console print out:
Start DoCmd(net postgresql-8.4)...
System error 1069 has occured.
The service did not start due to a logon failure.
Failed to start the database server.

I've checked the 8.4\Data folder and it is empty.

Is ther anyone who has a solution for this?

Kind regards,
Paul

#6Sachin Srivastava
sachin.srivastava@enterprisedb.com
In reply to: Malm Paul (#5)
Re: uppdate from postgersql 8.3.7 to 8.4.4

On 5/25/10 3:08 PM, Malm Paul wrote:

Hi,
I'm trying to update postgresql ver 8.7.3 to 8.4.4

The One-Click installer will not upgrade 8.3.7 to 8.4.4 rather it will
create a parallel 8.4.4 installation as both have different major versions.

At the end of the installation when trying to styart the database
server.... I get the following error meassage: "Problem running
post-install step. Installation may not complete correctly. Failed to
start the database server"
And when I try to start the server manually I get the following
console print out:
Start DoCmd(net postgresql-8.4)...
System error 1069 has occured.
The service did not start due to a logon failure.
Failed to start the database server.

Please attach %TEMP%\install-postgresql.log, which will help to analyze
things more clearly.

I've checked the 8.4\Data folder and it is empty.
Is ther anyone who has a solution for this?
Kind regards,
Paul

--
Regards,
Sachin Srivastava
EnterpriseDB <http://www.enterprisedb.com&gt;, the Enterprise Postgres
<http://www.enterprisedb.com&gt; company.

#7Alban Hertroys
dalroi@solfertje.student.utwente.nl
In reply to: Malm Paul (#5)
Re: uppdate from postgersql 8.3.7 to 8.4.4

On 25 May 2010, at 11:38, Malm Paul wrote:

Hi,
I'm trying to update postgresql ver 8.7.3 to 8.4.4

I know it's totally unrelated, but when did it become popular to send (HTML) messages in a very small blue font? I find this rather hard to read and usually fall back to the plain text alternative (which is included, thankfully).

This is not quite the first message formatted like this, I merely thought I should finally just ask. I did notice that most of the people sending messages formatted like this one don't appear to be native speakers (of English), does that have anything to do with it?

Alban Hertroys

--
Screwing up is an excellent way to attach something to the ceiling.

!DSPAM:737,4bfba33510414354318240!

#8Grzegorz Jaśkiewicz
gryzman@gmail.com
In reply to: Alban Hertroys (#7)
Re: uppdate from postgersql 8.3.7 to 8.4.4

On Tue, May 25, 2010 at 11:15 AM, Alban Hertroys
<dalroi@solfertje.student.utwente.nl> wrote:

On 25 May 2010, at 11:38, Malm Paul wrote:

Hi,
I'm trying to update postgresql ver 8.7.3 to 8.4.4

I know it's totally unrelated, but when did it become popular to send (HTML) messages in a very small blue font? I find this rather hard to read and usually fall back to the plain text alternative (which is included, thankfully).

ask microsoft folks working on outlook. Somehow they thought it is a good idea.

--
GJ

#9Leif B. Kristensen
leif@solumslekt.org
In reply to: Alban Hertroys (#7)
Re: uppdate from postgersql 8.3.7 to 8.4.4

On Tuesday 25. May 2010 12.15.14 Alban Hertroys wrote:

I know it's totally unrelated, but when did it become popular to send (HTML)

messages in a very small blue font? I find this rather hard to read and usually
fall back to the plain text alternative (which is included, thankfully).

At least there's a plain text fallback. Messages in HTML only are totally
unreadable in a plaintext MUA, and should IMO be bounced from the list.

regards,
--
Leif Biberg Kristensen
http://solumslekt.org/blog/

#10Greg Sabino Mullane
greg@turnstep.com
In reply to: Leif B. Kristensen (#9)
[OT] Re: update from postgresql 8.3.7 to 8.4.4

-----BEGIN PGP SIGNED MESSAGE-----
Hash: RIPEMD160

At least there's a plain text fallback. Messages in HTML only
are totally unreadable in a plaintext MUA, and should IMO be
bounced from the list.

Not totally unreadable. Good MUAs find ways to handle it. For
example, my mutt[1]Technically, mutt and mailcap is more than happy to automatically pipe
things through lynx -dump which works pretty well. That said,
+1 to bouncing email with no text at all.

[1]: Technically, mutt and mailcap

- --
Greg Sabino Mullane greg@turnstep.com
End Point Corporation http://www.endpoint.com/
PGP Key: 0x14964AC8 201005251117
http://biglumber.com/x/web?pk=2529DF6AB8F79407E94445B4BC9B906714964AC8
-----BEGIN PGP SIGNATURE-----

iEYEAREDAAYFAkv76icACgkQvJuQZxSWSsjtOACgxd0BRnE73BZJ1w1zfpKZ946s
x34Ani5IKIpCMzU/+Xh3nB1+U47Q1tLX
=gc5X
-----END PGP SIGNATURE-----