2009-09-04 93 views
1

我现在有类似的查询:单结果,用左连接的查询

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

这让我有类似的结果:

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 

这是我非常期待因为我有多个销售链接到一个用户,但我想只有一个用户列出(,也许是一种方式来选择哪个销售领域,从选择单一结果)这是可能的,我会怎么做呢?

即:

Fname | Lname | Date 

Jeff | K  | 5/18/08 
Bill | D  | 12/9/08 

回答

4
SELECT users.fname, users.lname, MAX(sales.date) 
FROM users 
LEFT JOIN sales ON users.id=sales.user 
GROUP BY users.fname, users.lname 

,或者如果你想从销售表字段:

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) 
+0

啊,我忘了良好的醇”组的命令。谢谢! – kilrizzy 2009-09-04 13:47:05

+0

第一个查询会给出一个错误:users.fname,users.lname不在aggergate函数或组中 – 2009-09-04 13:47:51

+0

应该是“GROUP BY users.fname,users.lname”而不是“GROUP BY sales.date” – jnylen 2009-09-04 17:24:52

0
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 
0

你必须组用户,并添加一些聚合函数在销售日期“控制”在查询结果集中输出哪个可能日期...

说你想要的最近日期...

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