2013-12-11 1 views
0

У меня есть данные таблицы, как показано ниже, которые поступают из разных таблиц. Я хочу взять максимальное значение из 4-го столбца, только если 3-й столбец имеет значение «долг», а 1 column(DATE) имеет максимальное значение. Конечное значение основано на MAX(DATE), а не MAX(PRICE). поэтому на простом языке он приходит таким образомВыбор значения MAX для одного столбца на основе двух других столбцов с одним столбцом, имеющим значение MAX

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

Вот изображение просмотра данных.

enter image description here

и текущий запрос я использую ниже

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), потому что может быть несколько значений за ту же дату.

enter image description here

И ПОЖАЛУЙСТА НЕ СПРАШИВАЙТЕ МЕНЯ СТАВИТЬ ДАННЫЕ В скрипке ВЕЩИ, ЕГО беспорядок DATABASE мне удалось с этим запросом и теперь хочу, чтобы быть на тот же структуру. БЛАГОДАРЯ

ответ

0

Попробуйте решение, похожее на:

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 
+0

Не в состоянии использовать подзапрос, должен быть большой беспорядок. Как я уже сказал, хочу сохранить структуру запроса таким же образом с помощью оператора CASE. – Saqib

Смежные вопросы