使用左连接时按顺序过滤查询并限制

时间:2013-02-20 08:25:08

标签: mysql sql select

如何在使用左连接时使用order bylimit过滤查询

store_profile
id + store_name
1  | Accessorize.me 
2  | Active IT 
3  | Edushop
4  | Gift2Kids
5  | Heavyarm 
6  | Bamboo 

store_fee
id + store_id + date_end
1  |    1     | 27-6-2013
2  |    2     | 29-8-2013
3  |    3     | 02-6-2013
4  |    4     | 20-4-2013
5  |    4     | 01-7-2013
6  |    4     | 28-9-2013
7  |    5     | 03-9-2013
8  |    6     | 01-9-2013

我之前的查询

$order_by_for_sort_column = "order by $column" //sorting column

$query = "SELECT * FROM store_profile sp LEFT JOIN store_fee sf ON (sf.store_id = sp.id) $order_by_for_sort_column";

对于表order by id desc,我想要的是limit 1store_fee,而不是整个查询。所以我可以在每个商店的date_end中获取最新日期。

正如你可以看到store_id 4(store_fee)我有3个不同的日期,我只想抓住最新的日期。

,结果应该是这样的

1  | Accessorize.me  27-6-2013
2  | Active IT       29-8-2013
3  | Edushop         02-6-2013
4  | Gift2Kids       28-9-2013
5  | Heavyarm        03-9-2013
6  | Bamboo          01-9-2013

2 个答案:

答案 0 :(得分:1)

SELECT  a.id, a.store_name, MAX(b.date_End) date_end
FROM    store_profile a
        LEFT JOIN store_fee b
            ON a.ID = b.store_ID
GROUP   BY a.id, a.store_name

但是如果数据类型date_End列是varchar,则上述查询将不起作用,因为它按字符对值进行排序,并且可能会错误地提供不需要的结果。 18-1-2013大于01-6-2013

要进一步了解联接,请访问以下链接:

答案 1 :(得分:1)

SELECT * 
FROM store_profile AS sp 
  LEFT JOIN (
    SELECT store_id, MAX(date_end) 
    FROM store_fee 
    GROUP BY store_id
  ) AS sf 
    ON sp.id=sf.store_id;