2017-06-19 41 views
0

我有一个问题是:从MySQL中的一组特定行中捕获最新日期。在MySQL中选择行的日期

例如:假设我有一个包含ID,客户端ID和购买日期的采购表。

enter image description here

如果我让基于客户端ID = 1的选择,我必须抓住购买的ID = 2

+0

更新你的问题,并添加预期的结果....数据不言 – scaisEdge

+0

选择ID,'客户id',MAX('purchase'日期) FROM表,其中'客户id' = 1 GROUP BY'客户端ID'; – JYoThI

回答

0

这是你所追求的?

SELECT Id, `client id`, MAX(`date of purchase`) 
FROM your_db 
GROUP BY `client id` 

此外,如果你只是想返回1行,然后

SELECT Id, `client id`, MAX(`date of purchase`) 
FROM your_db 
WHERE `client id` = 1 
+1

Id列不是聚合。该查询不会在其他数据库上运行,甚至不会在严格模式下运行的MySQL上运行。 –

+0

所以如此。事实上,我希望能够通过程序选择客户端ID。也就是说,我的“GROUP BY client_id”将是“where client_id = id”。但是这对我的答案帮了很大忙!坦克你 –

+0

@TimBiegeleisen这是正确的这个例子Id实际上并不需要在那里,除了它可以是一个参考。对于严格的MySQL Tim的答案会更好。对于不同的数据库,这是一个依赖于数据库的问题,因为有很多方法可以为皮肤提供皮肤 – Tik

0
SELECT id, client_id, DATE_OF_PURCHASE 
FROM purchasing 
GROUP BY DATE_OF_PURCHASE 
HAVING MAX(DATE_OF_PURCHASE) 

尝试上面的代码。

希望这会有所帮助。

0

如果你想整行,您可以通过几种方式做到这一点,但认为“过滤”,而不是“聚集”:

select t.* 
from t 
where (client_id, date_of_purchase) in (select client_id, max(date_of_purchase) 
             from t 
             group by client_id 
             ); 

当然,也有很多的方式来表达类似的逻辑。 。 。使用具有相关子查询的=existsjoin与聚合查询。

1

这样做的一种方法是加入子查询,查找每个客户的最新购买日期。

SELECT t1.* 
FROM yourTable t1 
INNER JOIN 
(
    SELECT client_id, MAX(purchase_date) AS max_purchase_date 
    FROM yourTable 
    GROUP BY client_id 
) t2 
    ON t1.client_id  = t2.client_id AND 
     t1.purchase_date = t2.max_purchase_date 
-- WHERE client_id = 1