【发布时间】:2013-12-11 17:41:57
【问题描述】:
我有一个如下表数据,来自不同的表。仅当第 3 列具有值“债务”且第 1 列 column(DATE) 具有最大值时,我才想从第 4 列中获取最大值。最终值基于MAX(DATE) 而不是MAX(PRICE)。所以用简单的语言它是这样的
IF(MAX(DATE) && TYPE = 'debt'){
MAX(PRICE);
}
这是可用数据的图像视图。
我正在使用的当前查询如下
SELECT
MAX(CASE WHEN PAYMENTS.PAYMENT = 'debt' AND RECEIPTS.DATENEW THEN PAYMENTS.TOTAL END) AS TAKENDEBT,
(CASE WHEN PAYMENTS.PAYMENT = 'debtpaid' THEN PAYMENTS.TOTAL END) AS GIVENDEBT,
MAX(CASE WHEN PAYMENTS.PAYMENT = 'debt' THEN RECEIPTS.DATENEW END) AS TAKENDATE,
MAX(CASE WHEN PAYMENTS.PAYMENT = 'debtpaid' THEN RECEIPTS.DATENEW END) AS GIVENDATE,
(MAX(CASE WHEN PAYMENTS.PAYMENT = 'debt' THEN PAYMENTS.TOTAL END) + SUM((CASE WHEN PAYMENTS.PAYMENT = 'debtpaid' THEN PAYMENTS.TOTAL END))) AS DUE,
CASE WHEN PAYMENTS.PAYMENT = 'debt' OR PAYMENTS.PAYMENT = 'debtpaid' THEN CUSTOMERS.NAME END AS CUSTOMER
FROM RECEIPTS
INNER JOIN TICKETS ON RECEIPTS.ID = TICKETS.ID
INNER JOIN PAYMENTS ON RECEIPTS.ID = PAYMENTS.RECEIPT
INNER JOIN CUSTOMERS ON TICKETS.CUSTOMER = CUSTOMERS.ID
WHERE
(PAYMENTS.PAYMENT = 'debt'
OR PAYMENTS.PAYMENT = 'debtpaid')
GROUP BY CUSTOMER
ORDER BY DUE DESC
这给了我如下所示的红色圆圈输出,而我需要绿色圆圈中的值。这意味着它基于 MAX(PRICE) 获得价值,而我需要基于 MAX(DATE) 然后 MAX(PRICE) 因为同一日期可以有多个值。
并且请不要让我将数据放入 FIDDLE 事物中,它是一个混乱的数据库,我设法有这个查询,现在想要在相同的结构上。谢谢
【问题讨论】: