2015-11-16 3 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 для apple из the 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

Было бы полезно, если бы вы могли указать имя своей таблицы и имя столбца значения. В настоящее время мы имеем только имя одного из столбцов ('last'). – trincot

+0

nice question Adam – 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) в процентах от myTable AS curr, myTable AS prev WHERE date (prev.timestamp) = '2015-11-16' AND date (curr.timestamp) = CURDATE() И curr.the_name_column = 'apple'' Как получить результат для имени 'apple' в этом примере? – Adam

+0

Можете ли вы добавить эту информацию в свой вопрос? Я обновил свой ответ, чтобы использовать колонку 'name' в том, как вы описываете. – 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] 
; 
Смежные вопросы