如何计算两个日期之间同一列的百分比?
我有专栏latest
。
例如: 2015-11-16,价值为159,4,今天价值为160,1。
在这些日期之间还有其他值,我现在不感兴趣。与“今天”日期相比,如何计算与特定日期的百分比差异。
修改
SELECT curr.latest * 100 / NULLIF(prev.latest, 0) as percentage
FROM myTable AS curr, myTable AS prev
WHERE date(prev.timestamp) = '2015-11-16'
AND date(curr.timestamp) = CURDATE()
AND curr.the_row_namn = 'apple'
特定日期的列latest
的百分比ex。 2015-11-16,使用表the_row_namn
中的myTable
苹果。
2015-11-16 latest
apple
the day
列today
的差异百分比是多少。
+--------------+--------+------------+
| the_row_namn | latest | timestamp |
+--------------+--------+------------+
| apple | 159,40 | 2015-11-16 |
| apple | 164,1 | 2015-11-17 |
+--------------+--------+------------+
预期输出:(舍入)percentage: 0,2864
甚至更好,如果可能的话2,8%
希望这会澄清事情。
答案 0 :(得分:0)
这是查询可以采用的一般形式:
SELECT a.value / b.value AS abPerc
FROM the_table AS a
INNER JOIN the_table AS b ON [pairing criteria]
;
答案 1 :(得分:0)
您可以使用以下SELECT
声明执行此操作:
SELECT curr.name,
curr.value * 100 / NULLIF(prev.value, 0) as percentage
FROM myTable AS curr
INNER JOIN myTable AS prev
ON curr.name = prev.name
WHERE prev.latest = '2015-10-26'
AND curr.latest = CURDATE()
AND curr.name = 'apple';
如果您遗漏了最后一个条件,您将获得name
每个可能值的结果。
此查询的要点是您使用表两次,一次选择当前记录,一次检索早期记录。您应该在where
子句的第一行指定您选择的日期。
一旦有了这两个记录,就可以直接从这两个记录的value
列中计算出一个百分比。
NULLIF
可以保护您免受division by zero
错误的影响。相反,您将获得NULL
结果。