2015-11-16 79 views
2

如何計算兩個日期之間來自同一列的百分比?從同一列計算mysql中的百分比

我列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列的百分比。 2015-11-16,蘋果the_row_namn從表myTable

是什麼latest柱爲applethe day的2015年11月16日的百分比差異來today

+--------------+--------+------------+ 
| the_row_namn | latest | timestamp | 
+--------------+--------+------------+ 
| apple  | 159,40 | 2015-11-16 | 
| apple  | 164,1 | 2015-11-17 | 
+--------------+--------+------------+ 

預期輸出:(四捨五入)percentage: 0,2864甚至更​​好,如果這是可能的2,8%

希望這將澄清的事情。

+0

如果您可以提供表格的名稱和值列的名稱,這將會很有幫助。我們目前只有其中一列的名稱(「最新」)。 – trincot

+0

不錯的問題亞當 – Drew

回答

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結果。

+0

這似乎是一個不錯的方法,謝謝!但是,我有一個問題.. =)我想我在我的問題中留下了一些重要的信息。我也試圖獲取特定的行,沒有運氣。 '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_name_column ='apple''在這個例子中,我如何獲取名稱'apple'的結果? – Adam

+0

你可以在你的問題本身添加這些信息嗎?我更新了我的答案,以您所描述的方式使用「名稱」列。 – trincot

+0

謝謝你的時間!非常感激 – Adam

0

這是一般形式這樣的查詢可以採取:

SELECT a.value/b.value AS abPerc 
FROM the_table AS a 
INNER JOIN the_table AS b ON [pairing criteria] 
;