Solved

Access SQL 2007 - How Do I Return First Match For Each Item in a List

Posted on 2009-06-28
5
477 Views
Last Modified: 2012-05-07
I am trying to create a query that will return the first matching record for each GlobalId from in a list.  In the table I usually have more than one record per GlobalID but only need to pull back the first record encountered per GlobalID match.

I have tried using TOP but it returns all records related to each global id as my query below is currently written.


SELECT TOP 25 *

FROM [Reconciliation-Working Copy]

WHERE GlobalID IN (SELECT Distinct GlobalId FROM [Reconciliation-Working Copy] WHERE GlobalID <> 'NULL')

Open in new window

0
Comment
Question by:NimBot
  • 2
  • 2
5 Comments
 
LVL 17

Expert Comment

by:pssandhu
Comment Utility
Can you post your table structure and some sample data?
P.
0
 
LVL 22

Expert Comment

by:8080_Diver
Comment Utility
And a definition of what you mean by "the first match"?  There is no guaranteed order for things when one is working with SQL unless one forces some sort of ordering.
0
 

Author Comment

by:NimBot
Comment Utility
Sample of Table Structure is pasted below.  When the values are returned based upon GlobalId I only need one row per Global Id to be returned.  It does not matter if it is the first or second row per Global Id match is returned.




Site	Sys	LegId	MtmSource	MtmDate	MtmCurr	MtmExp	MtmHigh	MtmLow	UpdUserID	TradeId	GlobalId	Trade Type	ExternalRefID	Filepath	Comments

YZ	XXXX	123L.A	System	20080912	USD	5000			Fred	123L	1	Vanilla Swap		C:\	

YZ	XXXX	123L.B	System	20080912	USD	5000			Fred	123L	1	Vanilla Swap		C:\	

YZ	XXXX	456C.A	System	20080912	USD	-7000			Sam	456C	2	Vanilla Swap		C:\	

YZ	XXXX	456C.B	System	20080912	USD	-7000			Sam	456C	2	Vanilla Swap		C:\	

YZ	XXXX	678M.A	System	20080912	USD	12000			Harold	678M	3	Vanilla Swap		C:\	

YZ	XXXX	678M.B	System	20080912	USD	12000			Harold	678M	3	Vanilla Swap		C:\	

Open in new window

0
 
LVL 17

Accepted Solution

by:
pssandhu earned 250 total points
Comment Utility
I cannot test this but please see if this works:


select r.*

From tablename r inner join ( select globalid, min(legid) Id from tablename group by globalid) t

On r.globalid = t.globalid and r.legid =t.Id

Open in new window

0
 

Author Closing Comment

by:NimBot
Comment Utility
Thanks.  The solution worked.
0

Featured Post

Why You Should Analyze Threat Actor TTPs

After years of analyzing threat actor behavior, it’s become clear that at any given time there are specific tactics, techniques, and procedures (TTPs) that are particularly prevalent. By analyzing and understanding these TTPs, you can dramatically enhance your security program.

Join & Write a Comment

'Between' is such a common word we rarely think about it but in SQL it has a very specific definition we should be aware of. While most database vendors will have their own unique phrases to describe it (see references at end) the concept in common …
If you have heard of RFC822 date formats, they can be quite a challenge in SQL Server. RFC822 is an Internet standard format for email message headers, including all dates within those headers. The RFC822 protocols are available in detail at:   ht…
Access reports are powerful and flexible. Learn how to create a query and then a grouped report using the wizard. Modify the report design after the wizard is done to make it look better. There will be another video to explain how to put the final p…
When you create an app prototype with Adobe XD, you can insert system screens -- sharing or Control Center, for example -- with just a few clicks. This video shows you how. You can take the full course on Experts Exchange at http://bit.ly/XDcourse.

762 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

14 Experts available now in Live!

Get 1:1 Help Now