Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL中选定行的日期_Mysql - Fatal编程技术网

MySQL中选定行的日期

MySQL中选定行的日期,mysql,Mysql,我有一个问题:从MySQL中的一组特定行捕获最新日期 例如:假设我有一个带有id、客户id和购买日期的采购表 如果我根据客户id=1进行选择,我必须捕获id=2的购买信息。这就是您想要的吗 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_

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

例如:假设我有一个带有id、客户id和购买日期的采购表


如果我根据客户id=1进行选择,我必须捕获id=2的购买信息。

这就是您想要的吗

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
试试上面的代码


希望这会有所帮助。

如果您想要整行,可以通过多种方式完成,但要考虑“筛选”而不是“聚合”:


当然,有很多方法可以表达相似的逻辑。将
=
与相关子查询一起使用,
存在
,或将
与聚合查询一起加入。

一种方法是加入子查询,该子查询将查找每个客户的最新购买日期

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

更新您的问题并添加预期结果…作为数据而不是文字从表中选择Id,
客户Id
,MAX(
购买日期
),其中
客户Id
=1组,由
客户Id
;Id列不是聚合。这个查询不会在其他数据库上运行,甚至不会在严格模式下运行的MySQL上运行。事实上,我希望能够通过过程选择客户机id。也就是说,我的“按客户机id分组”将是“其中客户机id=id”。但这对我的答案帮助很大!!!坦克you@TimBiegeleisen这是正确的,因为这个示例Id实际上不需要在那里,它可以作为参考。对于严格的mysql,Tim的答案会更好。对于不同的数据库,这是一个取决于数据库的问题,因为有许多方法可以剥猫皮
select t.*
from t
where (client_id, date_of_purchase) in (select client_id, max(date_of_purchase)
                                        from t
                                        group by client_id
                                       );
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