Display group title only at the first record within each group
От | CN |
---|---|
Тема | Display group title only at the first record within each group |
Дата | |
Msg-id | 1471968815.2343352.703756417.6A1C9C13@webmail.messagingengine.com обсуждение исходный текст |
Список | pgsql-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: SELECTCASE 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 ,amountFROM x ) t Would someone please give me a hand? Best Regards, CN -- http://www.fastmail.com - IMAP accessible web-mail
В списке pgsql-sql по дате отправления: