2013-04-28 3 views
0

У меня есть этот запрос MySQLПолучение разницы между summs

SELECT YEAR(date_entered), MONTHNAME(date_entered), SUM(amount) 
FROM opportunities 
GROUP BY YEAR(date_entered), MONTH(date_entered); 

, который возвращает эти данные

"year(date_entered)","monthname(date_entered)","sum(amount)" 
"2009","March","9038714.77" 
"2009","April","2205819" 
"2009","May","9706852.6" 

, что мне нужно сделать, это показать отличия? Например, марш был 903, апрель был 220, поэтому разница составит 680 и т. д., поэтому последнее значение суммы минус ценность драгоценных месяцев?

заранее спасибо

+0

Если вы можете гарантировать порядок результирующего набора, вы можете «обмануть» с пользовательскими переменными. В противном случае вы можете присоединить его к себе и рассчитать сумму более чисто, исходя из условий ON. – fenway

+1

Любая причина для этого в mysql? это было бы тривиально делать на стороне клиента ... –

ответ

0

Я хотел бы использовать запрос с переменными, как это:

SELECT 
    year_entered, month_entered, 
    [email protected]_sum diff, 
    @last_sum:=total_amount total_amount 
FROM (
    SELECT 
    YEAR(date_entered) year_entered, 
    MONTHNAME(date_entered) month_entered, 
    SUM(amount) total_amount 
    FROM 
    opportunities 
    GROUP BY 
    YEAR(date_entered), MONTH(date_entered) 
    ORDER BY 
    YEAR(date_entered), MONTH(date_entered) 
) s, 
    (SELECT @last_sum:=null) r 

Пожалуйста, см скрипку here.

0

Попробуйте

SELECT year_entered, 
     month_entered, 
     IFNULL(amount - @n, 0) amount_diff, 
     @n := amount current_amount 
    FROM 
(SELECT YEAR(date_entered) year_entered, 
     MONTHNAME(date_entered) month_entered, 
     SUM(amount) amount 
    FROM opportunities 
    GROUP BY YEAR(date_entered), MONTH(date_entered)) q, 
(SELECT @n := NULL) n 
+0

отлично, но теперь мне нужно принять его дальше –

+0

Отлично. Что мешает вам сделать это? – peterm

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