-
It seems simple, but I need some help to write a query that will only select the first row (columns a,b,c,d,e) of a group of similar rows. Example: an employee can have one or more records (columns a is the employee number), but I only want to extract the first row for each employee. See below:
Table
Emp, Fname, Lname,itemNo, ItemDesc
1 joe smith 123 test part
1 joe smith 134 test part 2
1 joe smith 145 test part 3
2 bill white 111 partb
3 dave green 123 test part
3 dave green 111 partb
These are the rows I'm trying to extract:
1 joe smith 123 test part
2 bill white 111 partb
3 dave green 111 partb
Please help. Thanks!
-
Do you have a create date as part of the table? If so, you can check for the max(create date).
Could you supply the table definition so we can help.
-
Correction, The last line should be as follows:
1 joe smith 123 test part
2 bill white 111 partb
3 dave green 123 test part
Thanks for your reply. There are no dates in the table. The table definition is as follows:
CREATE TABLE FGTAB.Product_Info
(
Emp_nr NUMBER,
Last_name VARCHAR2(50),
First_name VARCHAR2(50),
Prod_cd VARCHAR2(16),
Prod_descr VARCHAR(100),
Misc_notes VARCHAR(100)
)
There are no keys in the table. The table holds about 200 entries.
Thanks again for your help.
-
Ok..this is going to be fun, now isn't it.
First of all, put a create_dt on the table with a default of sysdate. Make your life easier for the future.
I would look at rownum rank if your running 8.1.6.
select min(rs), emp_nr, last_name,
first_name, prod_cd from
(select rownum rank rs, emp_nr, last_name,
first_name, prod_cd from
(select emp_nr, last_name, first_name, prod_cd,
from fgtab.product_info))
group by emp_nr, last_name, first_name, prod_cd
This might work..
-
Should the "rownum rank rs" work on the 8.1.5.0.0 release as well? It is giving me an error on the 'rank' qualifier.
I agree with you about adding a date field to the table, but we do not own the table and we are only using it to report the information that we need.
Thanks again for your help.
-
I think rownum rank started on version 8.1.6.
The only other thing I can think of is using a PL/SQL Package that use a For Cursor Loop with some sort of first time identifier.
Good Luck
-
You could use:
select * from mytable where rowid in (select min(rowid) from mytable group by emp);
Of course, this doesn't guarantee any certain order, but merely A record for each employee. Without a date/time stamp, there's no way to do it.
Oracle DBA and Developer
-
It worked! Thanks again to both of you for your help on this--Greatly Appreciated!
Posting Permissions
- You may not post new threads
- You may not post replies
- You may not post attachments
- You may not edit your posts
-
Forum Rules
|
Click Here to Expand Forum to Full Width
|