SQLinfo.ru - Все о MySQL

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

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

Вы не зашли.

#1 13.11.2010 19:52:08

SpaceIQ
Участник
Зарегистрирован: 05.10.2010
Сообщений: 4

Как сделать выборку по истории?

Добрый вечер!

Есть таблица истории, хранящая какие-то динамические данные, которые часто меняются. Упрощенно такая таблица выглядит так:

HistoryTable

id | OwnerId | date          | value
1  | 1          | 10.10.2010 | 5
2  | 1          | 11.10.2010 | 6
3  | 1          | 12.10.2010 | 7
4  | 2          | 09.10.2010 | 1
5  | 2          | 10.10.2010 | 0
6  | 2          | 12.10.2010 | 3

Где
id - ключ записи истории
OwnerId - индентфикатор объекта, к котому относиться история
date - время записи в истории
value - некоторое значение, состояние

Физически например это может быть таблица истории котировок различных валют. Например OwnerId - это ключ валюты, date - день, когда такой курс был, value - собственно курс.

Задача состоит в том, чтобы получить ключи из этой таблицы, например, следующую информацию:
- Получить валюты, у которых зафиксирован рост курса с date1 по date2 или абстрактно тоже самое:
- Получить набор OwnerId, у которых занчения value в диапазоне date1 по date2 выросло.

Вот так вот все сложно. В реальной таблице записей более сотни тысяч, в том числе имеется десятки тысяч "валют".

Кто может посоветывать что-то? Может истории вобще по другом надо хранить?

Заранее благодарен.

Неактивен

 

#2 13.11.2010 20:22:30

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6756

Re: Как сделать выборку по истории?

Сделайте таблицу производных:

SELECT @a := 0;
CREATE TABLE diff
SELECT value - @a AS diff, @a := value FROM HistoryTable ORDER BY date;

И потом по ней уже делайте выборку.

Неактивен

 

#3 13.11.2010 21:51:39

SpaceIQ
Участник
Зарегистрирован: 05.10.2010
Сообщений: 4

Re: Как сделать выборку по истории?

Спасибо, разберусь с этим завтра утром и напишу результат.

Неактивен

 

#4 17.11.2010 16:23:47

vaspet
Завсегдатай
Зарегистрирован: 11.03.2009
Сообщений: 83

Re: Как сделать выборку по истории?

@paulus
Хм..  это для каждой валюты отдел'но надо делат'? (OwnerId) или как?

П.С. Просто интересно.

Неактивен

 

#5 17.11.2010 17:29:07

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6756

Re: Как сделать выборку по истории?

Да, конечно. Если хочется перекинуть расчеты в MySQL, надо не смущаться
их перекидывать. Магии тут никакой нет — все равно, если нужно смотреть
рост на протяжении диапазона — надо весь диапазон обработать — в кли-
ентском приложении ли или в MySQL — всё равно.

Неактивен

 

Board footer

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