Re: HELP w/ SQL -- distinct select with non distinct fields? - Mailing list pgsql-sql
From | John Gilson |
---|---|
Subject | Re: HELP w/ SQL -- distinct select with non distinct fields? |
Date | |
Msg-id | aJNj9.12567$R8.3578139@twister.nyc.rr.com Whole thread Raw |
List | pgsql-sql |
"RVL" <rlyudmirsky@linkonline.net> wrote in message news:c5c42943.0209231423.3d143db6@posting.google.com... > I'm work with Sybase on the Sun... and, being a clueles newbee in SQL > department, hope you could help. I have a set of data: > > acct name qty link date memo > 101 item_A 100 0001 9/2/02 blah > 101 item_A 250 0001 9/3/02 n/a > 101 item_A 80 0002 9/3/02 n/a > 101 item_B 90 0002 8/8/02 n/a > 101 item_B 120 0003 9/7/02 n/a > 101 item_B 100 0003 9/2/02 abcd > 102 item_B 100 0004 9/3/02 xyz > 102 item_B 100 0004 9/7/02 xyz > 102 item_C 15 0005 9/1/02 n/a > 102 item_C 180 0005 9/5/02 n/a > > I need it to be consolidated by [link] and sorted by [acct] [name] and > subtotaled by [qty]. This is easy if I don't use date and memo: > SELECT DISTINCT acct, name, sum(qty), link FROM item_list > GROUP BY acct, name, link ORDER BY acct, name, line > > acct name qty link > 101 item_A 350 0001 > 101 item_A 170 0002 > 101 item_B 220 0003 > 102 item_B 200 0004 > 102 item_C 195 0005 > > However, I want [date] and [memo] from the _first_ record of the group > to be included. > > acct name qty link date memo > 101 item_A 350 0001 9/2/02 blah > 101 item_A 170 0002 9/3/02 n/a > 101 item_B 220 0003 8/8/02 n/a > 102 item_B 200 0004 9/3/02 xyz > 102 item_C 195 0005 9/1/02 n/a > > Fields [date] and [memo] are not diplicates, so I cannot consolidate > the set if I add them to SELECT. Is there another way to solve this? It helps to supply a CREATE TABLE and an INSERT so that the problem is better defined and a proposed solution can be easily tested. DATE is reserved in SQL so I'll change the column name to the less readable "d". Also, I believe your result is incorrect. CREATE TABLE item_list ( acct INT NOT NULL, name VARCHAR(10) NOT NULL, qty INT NOT NULL, link VARCHAR(5) NOT NULL, d DATETIME NOT NULL, memo VARCHAR(10) NOT NULL, PRIMARY KEY (acct, name, link, d) ) INSERT INTO item_list VALUES (101, ' item_A', 100, '0001', '20020902', 'blah') INSERT INTO item_list VALUES (101, 'item_A', 250, '0001', '20020903', 'n/a') INSERT INTO item_list VALUES (101, 'item_A', 80 , '0002', '20020903', 'n/a') INSERT INTO item_list VALUES (101, 'item_B', 90, '0002', '20020808', 'n/a') INSERT INTO item_list VALUES (101, 'item_B', 120, '0003', '20020907', 'n/a') INSERT INTO item_list VALUES (101, 'item_B', 100, '0003', '20020902', 'abcd') INSERT INTO item_list VALUES (102, 'item_B', 100, '0004', '20020903', 'xyz') INSERT INTO item_list VALUES (102, 'item_B', 100, '0004', '20020907', 'xyz') INSERT INTO item_list VALUES (102, 'item_C', 15, '0005', '20020901', 'n/a') INSERT INTO item_list VALUES (102, 'item_C', 180, '0005', '20020905', 'n/a') SELECT acct, name, SUM(qty) AS total, link, MIN(d) AS first_date, (SELECT memo FROM item_list WHERE acct = i.acct AND name = i.name AND link = i.linkAND d = MIN(i.d)) AS first_memo FROM item_list AS i GROUP BY acct, name, link ORDER BY acct, name, link which returns acct name total link first_date first_memo 101 item_A 350 0001 2002-09-02 00:00:00.000 blah 101 item_A 80 0002 2002-09-03 00:00:00.000 n/a 101 item_B 90 0002 2002-08-08 00:00:00.000 n/a 101 item_B 220 0003 2002-09-02 00:00:00.000 abcd 102 item_B 200 0004 2002-09-03 00:00:00.000 xyz 102 item_C 195 0005 2002-09-01 00:00:00.000 n/a Regards, jag