ВЫБРАТЬ из таблицы «значение1» минус «предыдущее значение» - PullRequest
3 голосов
/ 08 апреля 2009
SELECT      totalAmount
FROM        tbl
BETWEEN     'date1' AND 'date2'

GROUP BY    DATE(date created) 
ORDER BY    DATE(date created)

Это дает мне общую сумму за день, указанную в таблице. Но то, что я хочу, это инкрементное значение по сравнению с предыдущей записью (не обязательно предыдущим днем)

Таблица может выглядеть примерно так:

totalAmount    |    date created
---------------------------------
1000           |    1st Jan
1001           |    2nd Jan
1003           |    3rd Jan
1008           |    15th Jan

Так, где мой запрос вернется: 1000,1001,1003,1008.

Что я на самом деле хочу, так это: (число по сравнению с предыдущей записью - но не в пределах диапазона дат МЕЖДУ, чтобы начать мои инкрименты), 1,2,5

Ответы [ 3 ]

1 голос
/ 08 апреля 2009

Это должно сделать это:

SELECT IFNULL((t1.totalamount - t2.totalamount),0) as diff, t1.date_created
FROM view t1 LEFT OUTER JOIN view t2 
 ON t2.date = (SELECT MAX(date) FROM view WHERE date < t1.date)
WHERE t1.date_created BETWEEN 'date1' AND 'date2'
ORDER BY date_created

Где "view" - это запрос:

SELECT date_created, SUM(totalamount) FROM tbl GROUP BY date_created
0 голосов
/ 08 апреля 2009

Вам необходимо объединить два одинаковых ранжированных подзапроса. У меня нет базы данных MySQL для проверки, но форма будет похожа на:

select t1.TotalAmount, t1.DateCreated, 
    t1.TotalAmount - t2.TotalAmount as 'Delta'
from
(select rownum, TotalAmount
 from tbl
 order by DateCreated) t1
left outer join
(select rownum, TotalAmount
 from tbl
 order by DateCreated) t2
 on t1.rownum = t2.rownum + 1
 order by t1.rownum
0 голосов
/ 08 апреля 2009

Попробуйте это:

SELECT      totalAmount
FROM        tbl
BETWEEN     'date1' AND 'date2'

GROUP BY    DATE(date created) 
ORDER BY    totalAmount DESC, DATE(date created)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...