根据MAX日期和客户ID

时间:2016-06-21 15:10:24

标签: mysql

我有两个表:客户和合同。他们之间的共同关键是customer_id。我需要链接这两个表来表示我的虚拟业务是否与客户签订合同。

客户 - >合同表具有一对多关系,因此客户可以记录旧合同。我想要最新的。这当前由contract_id处理,自动递增。

我的查询应该根据customer_id和该customer_id的最大contract_id获取合约数据。

我的查询目前看起来像这样:

SELECT * FROM(
    SELECT co.* 
        FROM contracts co
        LEFT JOIN customers c ON co.customer_id = c.customer_id 
        WHERE co.customer_id ='135') a 
    where a.contract_id = MAX(a.contract_id);

答案可能非常明显,我只是没有看到它。

2 个答案:

答案 0 :(得分:1)

由于最近的合同将是a.contract_id最高的合同,只需ORDER BYLIMIT 1

SELECT * FROM(
    SELECT co.* 
        FROM contracts co
        LEFT JOIN customers c ON co.customer_id = c.customer_id 
        WHERE co.customer_id ='135') a 
ORDER BY a.contract_id DESC
LIMIT 1

答案 1 :(得分:1)

您可以使用EXTRA_OUTPUT

NOT EXISTS()

这将确保它是最新的合同,它对所有客户都是动态的,您只需删除SELECT * FROM contracts c LEFT JOIN customers co ON(co.customer_id = c.customer_id) WHERE co.customer_id = '135' AND NOT EXISTS(SELECT 1 FROM contracts co2 WHERE co2.customer_id = co.customer_id AND co2.contract_id > co.contract_id) 即可获得所有结果。

通常,您不能在WHERE co.customer_id = '135'子句上使用聚合函数,只能在通常与WHERE子句组合的HAVING()上使用。