MYSQL-添加列并计算日期的过期天数,并按最长延迟排序

MYSQL-添加列并计算日期的过期天数,并按最长延迟排序,mysql,aggregate-functions,Mysql,Aggregate Functions,假设我有一个带有以下字段和金额的tb\u invoice表: id | transaction_id | value | due 1 | 1 | 1109.97 | 2020-02-19 2 | 1 | 10, | 2019-05-01 我想添加value列,计算延迟天数并按最长延迟排序 通过下面的查询,我甚至可以得到某种结果,但它仍然不是我所需要的: SELECT *, SUM(value) AS total, DAT

假设我有一个带有以下字段和金额的
tb\u invoice
表:

id | transaction_id | value    | due
1  | 1              | 1109.97  | 2020-02-19
2  | 1              | 10,      | 2019-05-01
我想添加value列,计算延迟天数并按最长延迟排序

通过下面的查询,我甚至可以得到某种结果,但它仍然不是我所需要的:

SELECT *, SUM(value) AS total, DATEDIFF(CURDATE(), due) as delay
FROM tb_invoice
WHERE transaction_id = 1
GROUP BY transaction_id
这给我带来了以下结果:

id | transaction_id | value   | due | total   | delay
1  | 1              | 1109.97 | 2020-02-19    | 1119.97 | 91
我需要按最长的延迟订购,甚至按添加订单,我不能!有可能做到这一点吗?

您无意中发现了。SELECT提到一个值
DATEDIFF(CURDATE(),due)
,该值不是聚合函数,在GROUP BY子句中也没有提到。所以它实际上意味着
DATEDIFF(CURDATE(),任意值(due))

思考
任何值()
的一个好方法是
可能是你想要的值,可能不是()。换句话说,它不是确定性的

对列值
DATEDIFF(CURDATE(),MIN(due))
尝试此操作。使用
orderbymin(due)
首先获取最旧的商品。

欢迎使用SO。请看