SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 01.08.2009 00:08:29

Twix
Завсегдатай
Зарегистрирован: 21.02.2008
Сообщений: 88

Простая арифметика

Уважаемые коллеги , имеется таблица

`DATA` (             
  `id` int(10) unsigned NOT NULL auto_increment,
  `SYMBOL` varchar(12) NOT NULL,
  `price` decimal(15,6) NOT NULL,
 
  PRIMARY KEY  (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=325014140 DEFAULT CHARSET=utf8 ROW_FORMAT=FIXED;

хотелось бы посмотреть разницу значений столбца `price` для текущего и предыдущего значения.
То есть , рассуждаю , необходимо создать новую таблицу , скажем 'SPRED' в строки которой будут заноситься полученные значения разницы price - price[-1] .
Каким образом сиё организовать , может быть я усложняю и можно всё решить посредством SELECT ???

Неактивен

 

#2 01.08.2009 03:03:17

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Простая арифметика

set @x=0;
select price-@x, @x:=price from `data`;

Неактивен

 

#3 01.08.2009 11:25:50

Twix
Завсегдатай
Зарегистрирован: 21.02.2008
Сообщений: 88

Re: Простая арифметика

vasya написал:

set @x=0;
select price-@x, @x:=price from `data`;

Этот скрипт выодит не то что хотелось бы .

Строки таблицы имеют следующий вид

356837317, 'A', 354.1000
356837318, 'A', 354.1010
...

хотелось бы увидеть разницу полей price этих двух строк и так далее...

Неактивен

 

#4 01.08.2009 17:26:07

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Простая арифметика

Первая колонка как раз и выводит искомую вами разницу полей price двух последовательных строк. Понятно, что в первой строчке будет разница price с нулем, т.е. само значение поля price.

Или вы имели в виду что-то другое?

Неактивен

 

#5 01.08.2009 20:01:57

Twix
Завсегдатай
Зарегистрирован: 21.02.2008
Сообщений: 88

Re: Простая арифметика

Да спасибо , всё ОК! . Попробывал ввёл предложенный Вами запрос в MySQL Query Browser получил следующее

NULL, 273.2500
NULL, 273.3500
NULL, 273.2500

.....

И тот же скрипт в командной строке

+----------+-----------+
| price-@x | @x:=price |
+----------+-----------+
| 273.1300 |  273.1300 |
|   0.0000 |  273.1300 |
|   0.0000 |  273.1300 |
|   0.0000 |  273.1300 |
|   0.0000 |  273.1300 |
|   0.0000 |  273.1300 |
|   0.0000 |  273.1300 |
|   0.0000 |  273.1300 |
|   0.0000 |  273.1300 |
|   0.0000 |  273.1300 |
|   0.0000 |  273.1300 |
|   0.0000 |  273.1300 |
|   0.0000 |  273.1300 |
|   0.0000 |  273.1300 |
|   0.0000 |  273.1300 |
|   0.0000 |  273.1300 |
|   0.0000 |  273.1300 |
|   0.0000 |  273.1300 |
|   0.0000 |  273.1300 |
|   0.0000 |  273.1300 |
|   0.0000 |  273.1300 |
|   0.1200 |  273.2500 |
|   0.0000 |  273.2500 |
|   0.1500 |  273.4000 |
|  -0.1500 |  273.2500 |
|   0.1500 |  273.4000 |
|  -0.1500 |  273.2500 |
|   0.0000 |  273.2500 |
|   0.1000 |  273.3500 |
|  -0.1000 |  273.2500 |
|   0.0000 |  273.2500 |
|   0.0000 |  273.2500 |
|   0.0000 |  273.2500 |
|   0.0000 |  273.2500 |
|   0.0000 |  273.2500 |
|   0.0000 |  273.2500 |
|   0.0000 |  273.2500 |
|   0.0000 |  273.2500 |
|   0.0000 |  273.2500 |
|   0.0500 |  273.3000 |
|   0.0000 |  273.3000 |
|  -0.0500 |  273.2500 |
|   0.0000 |  273.2500 |
|  -0.0200 |  273.2300 |
|   0.0000 |  273.2300 |
|  -0.0300 |  273.2000 |
|  -0.0900 |  273.1100 |
|  -0.0100 |  273.1000 |
|  -0.0800 |  273.0200 |
|   0.0000 |  273.0200 |
+----------+-----------+

Всё что и хотелось бы увидеть.
Ещё раз убеждаюсь в преимуществах работы с MySQL Command Line .

Неактивен

 

#6 01.08.2009 21:35:07

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Простая арифметика

Query Browser  разрывает соединение после выполнения каждой команды. А пользовательские переменные существуют в течении сессии, поэтому при выполнении второй команды переменная @x будет неопределена, т.е. иметь значение NULL.
Отсюда и такой результат в Query Browser.

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson