agora inbox for pgsql-sql@postgresql.org
help / color / mirror / Atom feedFrom: CN <cnliou9@fastmail.fm>
To: pgsql-sql@postgresql.org
Subject: Display group title only at the first record within each group
Date: Wed, 24 Aug 2016 00:13:35 +0800
Message-ID: <1471968815.2343352.703756417.6A1C9C13@webmail.messagingengine.com> (raw)
List-Unsubscribe: <mailto:majordomo@postgresql.org?body=unsub%20pgsql-sql>
Hi!
Such layout is commonly seen on real world reports where duplicated
group titles are discarded except for the first one.
CREATE TABLE x(name TEXT,dt DATE,amount INTEGER);
COPY x FROM stdin;
john 2016-8-20 80
mary 2016-8-17 20
john 2016-7-8 30
john 2016-8-19 40
mary 2016-8-17 30
john 2016-7-8 50
\.
My desired result follows:
john 2016-07-08 50
30
2016-08-19 40
2016-08-20 80
mary 2016-08-17 20
30
Note that "dt" is sorted as if clause
ORDER BY name,dt
was applied to SELECT.
With this SELECT:
SELECT name
,ROW_NUMBER() OVER (PARTITION BY name) AS rn_name
,dt
,ROW_NUMBER() OVER (PARTITION BY name,dt) AS rn_dt
,amount
FROM x;
I get this result:
john 2 2016-07-08 1 30
john 4 2016-07-08 2 50
john 3 2016-08-19 1 40
john 1 2016-08-20 1 80
mary 1 2016-08-17 1 20
mary 2 2016-08-17 2 30
Above result shows that records are not sorted by rn_name and rn_dt.
Were the above records correctly sorted "BY rn_name,rn_dt", the
following SELECT probably would fulfill my ultimate goal:
SELECT
CASE WHEN rn_name=1 THEN name ELSE NULL END
,CASE WHEN rn_dt=1 THEN dt ELSE NULL END
,amount
FROM (
SELECT name
,ROW_NUMBER() OVER (PARTITION BY name) AS rn_name
,dt
,ROW_NUMBER() OVER (PARTITION BY name,dt) AS rn_dt
,amount
FROM x
) t
Would someone please give me a hand?
Best Regards,
CN
--
http://www.fastmail.com - IMAP accessible web-mail
--
Sent via pgsql-sql mailing list (pgsql-sql@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-sql
view thread (2+ messages) latest in thread
Message-ID: <1471968815.2343352.703756417.6A1C9C13@webmail.messagingengine.com>
Permalink: ../1471968815.2343352.703756417.6A1C9C13@webmail.messagingengine.com/
Also on: postgresql.org/message-id/1471968815.2343352.703756417.6A1C9C13@webmail.messagingengine.com
reply
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Reply to all the recipients using the --to and --cc options:
reply via email
To: pgsql-sql@postgresql.org
Cc: cnliou9@fastmail.fm
Subject: Re: Display group title only at the first record within each group
In-Reply-To: <1471968815.2343352.703756417.6A1C9C13@webmail.messagingengine.com>
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
This inbox is served by agora; see mirroring instructions
for how to clone and mirror all data and code used for this inbox