简体   繁体   English

根据另外两列为一列选择MAX值,其中一列具有MAX值

[英]Selecting MAX value for one column based on two other columns with one column having MAX value

I have a table data as below, that comes from different tables. 我有一个下表数据,它来自不同的表。 I want to take the maximum value from 4th column only if 3rd column has value 'debt' AND 1st column(DATE) has maximum value. 我只想在第3列具有值'debt'并且第1 column(DATE)具有最大值的情况下从第4列获取最大值。 The final value is based on MAX(DATE) rather than MAX(PRICE) . 最终值基于MAX(DATE)而不是MAX(PRICE) so in simple language it comes this way 所以用简单的语言来这样

IF(MAX(DATE) && TYPE = 'debt'){
   MAX(PRICE);
}

Here is the image view of data available. 这是可用数据的图像视图。

在此处输入图片说明

and the current query I am using is below 我正在使用的当前查询如下

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

which gives me the output as shown below with red circle, while I need the value in green circle. 这给了我输出,如下图所示,带红色圆圈,而我需要绿色圆圈中的值。 That means it's getting value based on MAX(PRICE) while I need on based of MAX(DATE) then MAX(PRICE) because there can be multiple values for same date. 这意味着它要基于MAX(PRICE)获取值,而我需要基于MAX(DATE)然后基于MAX(PRICE),因为同一日期可能有多个值。

在此处输入图片说明

AND PLEASE DON'T ASK ME TO PUT DATA IN FIDDLE THING, ITS A MESS OF DATABASE I MANAGED TO HAVE THIS QUERY AND NOW WANT TO BE ON THE SAME STRUCTURE. 并且请不要让我将数据放入固定的事物中,因为它是我要管理的数据库的一部分,因此具有该查询,现在不再需要具有相同的结构。 THANKS 谢谢

Try a solution similar to: 尝试类似的解决方案:

SELECT date, max(price) FROM yourTable 
  WHERE payment='debt' AND date = ( SELECT max(date) From yourTable)
  GROUP BY date

or 要么

SELECT date ,max(price) FROM yourTable
  WHERE payment='debt'
  GROUP BY date
  ORDER BY date DESC
  LIMIT 1

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM