【问题标题】:Selecting MAX value for one column based on two other columns with one column having MAX value根据其他两列选择一列的 MAX 值,其中一列具有 MAX 值
【发布时间】: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 事物中,它是一个混乱的数据库,我设法有这个查询,现在想要在相同的结构上。谢谢

【问题讨论】:

    标签: mysql case


    【解决方案1】:

    尝试类似的解决方案:

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

    或

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

    【讨论】:

    • 不适合使用子查询,应该是一团糟。正如我所说,要保持查询的结构与 CASE 语句相同。
    猜你喜欢
    • 2021-11-12
    • 1970-01-01
    • 2022-09-30
    • 1970-01-01
    • 2020-03-07
    • 2015-10-08
    • 2023-03-17
    • 2018-09-24
    • 1970-01-01
    相关资源
    最近更新 更多