tags:

views:

85

answers:

3

I currently have a query similar to:

SELECT users.fname, users.lname, sales.date 
FROM users
LEFT JOIN sales ON users.id=sales.user

And this gives me the result of something like:

Fname | Lname | Date

Jeff  | K     | 2/12/08
Jeff  | K     | 5/18/08
Jeff  | K     | 2/22/09
Bill  | D     | 3/12/08
Bill  | D     | 12/9/08

This is what I pretty much expect since I have multiple sales linking to a user but I would like to have only one user listed (and maybe a way to pick which sales field that single result picks from) Is this possible and how would I go about doing this?

ie:

Fname | Lname | Date

Jeff  | K     | 5/18/08
Bill  | D     | 12/9/08
+4  A: 
SELECT users.fname, users.lname, MAX(sales.date)
FROM users
LEFT JOIN sales ON users.id=sales.user
GROUP BY users.fname, users.lname

or if you want more fields from the sales table:

SELECT users.fname, users.lname, sales.date, sales.proft
FROM users
LEFT JOIN sales ON users.id=sales.user
AND sales.date = (SELECT MAX(sales.date) FROM sales WHERE user = users.id)
longneck
Ah I forgot the good ol' group by command. Thanks!
kilrizzy
1st query will give an error: users.fname, users.lname not in an aggergate function or in group by
KM
Should be "GROUP BY users.fname, users.lname" instead of "GROUP BY sales.date"
jnylen
@KM and @jnylen are correct. post edited.
longneck
A: 
SELECT users.fname, users.lname, max(sales.date) as date
FROM users
LEFT JOIN sales ON users.id=sales.user
group by users.fname, users.lname
najmeddine
A: 

You have to group By the User, and add some aggregate function on the sales date to "control" which of the possible dates to output in the querys result set...

say you want the most recent date...

Select u.fname, u.lname, Max(s.date) LastSale
FROM users u 
  LEFT JOIN sales s ON u.id=s.user
Group By u.fname, u.lname
Charles Bretana