首页 > 解决方案 > 分组行时选择MySQL中最旧的时间戳

问题描述

这是我当前的查询:

SELECT product,
       SUM(price) AS revenue,
       COUNT(*)   AS sales,
       timestamp
FROM   payments
WHERE  status = 'Completed'
        OR status = 'Pending'
        OR status = 'Canceled_Reversal'
GROUP  BY product

一切都在正常工作,除了timestamp列。

该列显示收到付款的日期/时间。我希望它显示购买每种产品的最后日期。现在无论我改变什么,它似乎都显示最旧的......

标签: mysqlsql

解决方案


尝试MAX(timestamp)如下选择。您应该使用聚合函数,例如SUM,COUNT或对于子句中提及的MAX每个选定列,否则查询变得可疑甚至可能非法,具体取决于 MySql only_full_group_by选项。在您的情况下,它只是从任意行中选择。GROUP BYtimestamp

SELECT product,
       SUM(price) AS revenue,
       COUNT(*)   AS sales,
       MAX(timestamp) as timestamp
FROM   payments
WHERE  status = 'Completed'
        OR status = 'Pending'
        OR status = 'Canceled_Reversal'
GROUP  BY product

推荐阅读