我如何使用 SQL 获取最后一笔付款
例子:
SELECT DATEOFPAYMENT
FROM PAYMENTS
WHERE DATEOFPAYMENT = (SELECT MAX(DATEOFPAYMENT) FROM PAYMENTS)
但这不起作用,因为它抱怨要求分组?
我如何使用 SQL 获取最后一笔付款
例子:
SELECT DATEOFPAYMENT
FROM PAYMENTS
WHERE DATEOFPAYMENT = (SELECT MAX(DATEOFPAYMENT) FROM PAYMENTS)
但这不起作用,因为它抱怨要求分组?
SELECT DATEOFPAYMENT
FROM PAYMENTS
WHERE DATEOFPAYMENT = (SELECT MAX(DATEOFPAYMENT) FROM PAYMENTS GROUP BY DATEOFPAYMENT);
如果只需要一个字段,为什么需要子查询?
select max(DateOfPayment)
FROM Payments
如果您想要“最后一次付款”中的所有数据
select p.Id, p.DateOfPayment, p.Name -- don't know your fields, just an example
FROM Payments p
INNER JOIN (select Id, MAX(DateOfPayment) maxdate
FROM Payments
GROUP BY Id) as m
ON m.Id = p.Id and p.DateOfPayment = m.maxdate
如果您只想要其他字段,并且这些其他字段具有最大 dateOfPayment,则不在聚合函数中的所有字段都必须在 GROUP BY 子句中
select p.Id, p.Name, max(p.DateOfPayment)
From Payments p
GROUP BY p.Id, p.Name
我通常会使用TOP
and ORDER BY
。
SELECT TOP 1 DATEOFPAYMENT
FROM PAYMENTS
ORDER BY DATEOFPAYMENT DESC
或获取整个记录:
SELECT TOP 1 *
FROM PAYMENTS
ORDER BY DATEOFPAYMENT DESC
SELECT TOP 1 DATEOFPAYMENT
FROM PAYMENTS
ORDER BY DATEOFPAYMENT DESC
cluase 使用的所有聚合函数:
SELECT DATEOFPAYMENT FROM PAYMENTS WHERE DATEOFPAYMENT = (SELECT MAX(DATEOFPAYMENT) FROM PAYMENTS group by DATEOFPAYMENT)
你有 2 个选项,选择 MAX 值
select max(DateOfPayment) FROM Payments
或按 DateOfPayment desc 选择前 1 个 DateOfPayment 订单
运行两者,检查计划和性能并选择最好的一个:)
如果您只是想要它只是在询问最后一次付款
从付款中选择 MAX(付款日期)作为付款日期
或者例如,如果您想要一个列出每位员工最后一次获得报酬的列表,您将使用
SELECT MAX(dateofpayment) 从 Payment GROUP BY EmployeeID
要求您分组的原因是因为您使用的是聚合函数