Задавайте вопросы, мы ответим
Вы не зашли.
Добрый вечер!
Есть таблица истории, хранящая какие-то динамические данные, которые часто меняются. Упрощенно такая таблица выглядит так:
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 выросло.
Вот так вот все сложно. В реальной таблице записей более сотни тысяч, в том числе имеется десятки тысяч "валют".
Кто может посоветывать что-то? Может истории вобще по другом надо хранить?
Заранее благодарен.
Неактивен
Сделайте таблицу производных:
SELECT @a := 0;
CREATE TABLE diff
SELECT value - @a AS diff, @a := value FROM HistoryTable ORDER BY date;
И потом по ней уже делайте выборку.
Неактивен
Спасибо, разберусь с этим завтра утром и напишу результат.
Неактивен
@paulus
Хм.. это для каждой валюты отдел'но надо делат'? (OwnerId) или как?
П.С. Просто интересно.
Неактивен
Да, конечно. Если хочется перекинуть расчеты в MySQL, надо не смущаться
их перекидывать. Магии тут никакой нет — все равно, если нужно смотреть
рост на протяжении диапазона — надо весь диапазон обработать — в кли-
ентском приложении ли или в MySQL — всё равно.
Неактивен