mysql与前一行的百分比差异
如何计算mysql中前一行的百分比差异 我可以让它工作,但如果我的日期列不是连续的,我不知道如何动态地拉它:mysql与前一行的百分比差异,mysql,sql,Mysql,Sql,如何计算mysql中前一行的百分比差异 我可以让它工作,但如果我的日期列不是连续的,我不知道如何动态地拉它: SELECT c1.date, c1.total, ( ( c1.total - ifnull(c2.total, 0) ) / c1.total ) AS percentage_change FROM table c1 LEFT OUTER JOIN table c2 ON c1.id =
SELECT c1.date,
c1.total,
( ( c1.total - ifnull(c2.total, 0) ) / c1.total ) AS percentage_change
FROM table c1
LEFT OUTER JOIN table c2
ON c1.id = c2.id
AND c1.date - c2.date = 1
ORDER BY c1.date DESC
LIMIT 30
问题是我的日期列不一定是c1.total-c2.total=1
我刚才的一个想法是做一个子查询,选择c2.date
SELECT c1.date,
c1.total,
( ( c1.total - Ifnull((SELECT c3.date
FROM table c3
WHERE c3.date < c1.date
ORDER BY c3.date DESC
LIMIT 1), 0)
) / c1.total ) AS percentage_change
FROM table c1
LEFT OUTER JOIN table c2
ON c1.id = c2.id
AND c1.date - c2.date = 1
ORDER BY c1.date DESC
LIMIT 30
以下是您如何做到这一点:
SELECT current.id, current.date, ((current.total - IFNULL(prev.total, 0)) / current.total) AS percentage_change
FROM
(SELECT c1.id, c1.total, count(c2.*) as ordinal
FROM some_table AS c1, some_table AS c2
WHERE c2.date < c1.date) AS curr
OUTER JOIN (SELECT c1.id, c1.total, count(c2.*) as ordinal
FROM some_table AS c1, some_table AS c2
WHERE c2.date < c1.date) AS prev
ON curr.ordinal - 1 = prev.ordinal;
然后在迭代结果集的过程中,在应用程序内部进行数学运算。天啊,人们用这一个做了一顿饭,不是吗?!考虑提供适当的DDL和/或SqLFIDLE连同期望的结果设置谢谢!是的,我认为在SQL之外进行计算会容易得多。谢谢你的建议
SELECT * FROM some_table ORDER BY date ASC;