|
Помогите с представлением
|
|||
---|---|---|---|
#18+
Неиндексированный файл отсортирован по дате DATE и времени TIME. Записи содержат случайные по времени измерения величины Y. Хочу получить представление, в котором все было бы ужато до: 1. дата 2. значение Y на начало дня 3. значение Y на конец дня 4. максимальное значение Y в течение дня Сделал GROUP BY date. Для пункта 4: MAX(Y) А, пункты 2 и 3 стали камнем преткновения. Мне нужно написать собственную функцию для представления ? Или можно обойтись стандартными? ... |
|||
:
Нравится:
Не нравится:
|
|||
18.04.2010, 12:11 |
|
Помогите с представлением
|
|||
---|---|---|---|
#18+
tansoc, Фокса под рукой нет, но вопрос показался интересным, поэтому приведу пример решения с использованием стандартного SQL на Oracle, думаю без труда сможете перенести на FoxPro. Есть одно но - данный пример работает при условии уникальности поля tm. Если оно неуникально - доработаете напильником. Имеем входные данные: Входные данные Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8.
dt y tm11.01.2010 2 11.01.2010 2:24:0011.01.2010 3 11.01.2010 4:48:0011.01.2010 1 11.01.2010 7:12:0023.01.2010 4 21.01.2010 2:24:0023.01.2010 5 21.01.2010 4:48:0023.01.2010 6 21.01.2010 7:12:00 Запрос, вытягивающий необходимые данные Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8.
dt y_begin y_end y_max11.01.2010 2 1 323.01.2010 4 6 6 Если интересно - пример решения на Oracle с использованием аналитических ф-ий Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
... |
|||
:
Нравится:
Не нравится:
|
|||
18.04.2010, 12:58 |
|
Помогите с представлением
|
|||
---|---|---|---|
#18+
tansoc, Отлично. Все работает. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8.
... |
|||
:
Нравится:
Не нравится:
|
|||
18.04.2010, 17:00 |
|
Помогите с представлением
|
|||
---|---|---|---|
#18+
Спасибо за внимание. Не помогло. Я сделал даже из вашего примера табличку, но ваш запрос в VPF-9 не захотел работать. К тому же, у меня задачка немного сложнее. Думал, что справлюсь и упростил условие. А ума не хватило. :( Выглядеть должно так: Во вложении есть dbf-файл mart c полями: 1. DATE 2. TIME 3. OPEN - цена на начало текущей минуты 4. CLOSE - цена на конец текущей минуты 5. LOW - минимум цены текущей минуты 6. HIGH -максимум текущей минуты Время TIME меняется ежеминутно. Файл неиндексирован, но уже отсортирован по дате-времени. Нужен запрос для получения отчета по дням: 1. DATE 2. OPEN (значение из записи с минимальным временем на текущую DATE, собственно это первая запись на выбранную дату, т.к.файл сортирован) 3. HIGH (Значение с максимальным HIGH в течение дня) 4. LOW (значение с минимальным значением в течение дня) 5. CLOSE (значение из последней записи дня, т.е. с максимальным временем, ибо файл уже сортирован по дате времени Собственно, тоже самое, только не в минутах, а в днях... Мне тут дали пару вариантов, но они тоже в фоксе не работают: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
Первый вариант фоксу не нравится из-за сложности конструкции. А про второй пишет: "не символьным выражение" ... |
|||
:
Нравится:
Не нравится:
|
|||
20.04.2010, 15:39 |
|
Помогите с представлением
|
|||
---|---|---|---|
#18+
tansoc, А у тебя time случаем не как character хранится? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.04.2010, 15:53 |
|
Помогите с представлением
|
|||
---|---|---|---|
#18+
tansoc, Если бы не OPEN и CLOSE, то можно было бы запросом, а так проще код написать. Примерно так Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17.
... |
|||
:
Нравится:
Не нравится:
|
|||
20.04.2010, 15:57 |
|
Помогите с представлением
|
|||
---|---|---|---|
#18+
AmKad, TIME - character. А разве это может быть помехой? Точно также все сортируется. Точно такие же минимумы-максимумы Вот, сейчас еще попробовал. Второй вариант выполнился. Действительно, выборка прошла. Но при попытке сохранить не результаты, а сам запрос в файле пишет: not a character expression ... |
|||
:
Нравится:
Не нравится:
|
|||
20.04.2010, 16:15 |
|
Помогите с представлением
|
|||
---|---|---|---|
#18+
Dima T, спасибо. Но такой цикл я и сам мог бы написать. Мне хочется именно запросом. :) ... |
|||
:
Нравится:
Не нравится:
|
|||
20.04.2010, 16:17 |
|
Помогите с представлением
|
|||
---|---|---|---|
#18+
tansocDima T, спасибо. Но такой цикл я и сам мог бы написать. Мне хочется именно запросом. :) Тогда сам голову ломай :) Зачем надо именно запросом? Ради спортивного интереса? Проблемы возникают всегда когда в запросе с группировкой надо получить что-то из записи номер Х (первой, последней, предыдущей), а проблема эта от того что в SQL не понятия "номер записи", из-за этого приходится извращаться. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.04.2010, 16:48 |
|
Помогите с представлением
|
|||
---|---|---|---|
#18+
Dima T, Меня уже поставили в известность, что в SQL нет понятия номер записи. Проиндексировать файл проблем нет. А усливие min-max можно применять к символьному полю TIME. Отчего запросом? Ну, пусть это моя прихоть. :) Меня уже обрадовало, что второй запрос все таки ищет, что мне надо. Только почему-то не хочет в qpr-файл сохраняться. Я его пробую сделать через File-New-Query. Там открываю mart.dbf. А потом сразу пытаюсь вставить текст запроса в SQL-окно. Если я запускаю RUN, запрос срабатывает. Но если жму на дискетку, для сохранения qpr-файла, то сразу идет сообщение об ошибке. Может, чего не так делаю? Не сохраняется сам текст запроса. И файл mart выбрасывает. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.04.2010, 17:10 |
|
Помогите с представлением
|
|||
---|---|---|---|
#18+
tansocТолько почему-то не хочет в qpr-файл сохраняться. Я его пробую сделать через File-New-Query. Там открываю mart.dbf. А потом сразу пытаюсь вставить текст запроса в SQL-окно. Если я запускаю RUN, запрос срабатывает. Но если жму на дискетку, для сохранения qpr-файла, то сразу идет сообщение об ошибке. Может, чего не так делаю?Угую НЕ НАДО пользоваться посторителем запросов. Сделайте обычный текстовый файл, поместите туда запрос и сохраните с нужным расширением если уж оно Вам важно. Не сохраняется сам текст запроса. И файл mart выбрасывает.Не умеет он с такими сложными запросами работать. Это костыль для полных чайников. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.04.2010, 17:13 |
|
Помогите с представлением
|
|||
---|---|---|---|
#18+
Dima T а проблема эта от того что в SQL не понятия "номер записи", из-за этого приходится извращаться. На всякий случай добавлю, что понятие "номер записи" наполняется смыслом лишь при задании способа сортировки. В данном случае у ТС-а порядок сортировки задается полем time. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.04.2010, 17:25 |
|
Помогите с представлением
|
|||
---|---|---|---|
#18+
Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
... |
|||
:
Нравится:
Не нравится:
|
|||
20.04.2010, 17:52 |
|
Помогите с представлением
|
|||
---|---|---|---|
#18+
Извиняюсь, первая таблица в запросе лишняя Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
И еще, приведенный запрос будет работать корректно только в случае, если нет однакового минимального или максимального time в течении дня. Если же есть дубли, то возникнут дубли записей в выборке. Впрочем, это можно решить через опцию DISTINCT ... |
|||
:
Нравится:
Не нравится:
|
|||
20.04.2010, 18:02 |
|
Помогите с представлением
|
|||
---|---|---|---|
#18+
tansoc... Мне тут дали пару вариантов, но они тоже в фоксе не работают: Код: plaintext 1. 2. 3. 4.
Первый вариант фоксу не нравится из-за сложности конструкции. А про второй пишет: "не символьным выражение" Этот вариант рабочий и наиболее быстрый по скорости из всех SELECT`ов, только будет задвоение если в исходных данных повторится запись с одинаковым первым(последним) датой-временем AmKadDima T а проблема эта от того что в SQL не понятия "номер записи", из-за этого приходится извращаться. На всякий случай добавлю, что понятие "номер записи" наполняется смыслом лишь при задании способа сортировки. В данном случае у ТС-а порядок сортировки задается полем time. От того что оно смыслом наполнилось запрос проще не становится. Все-таки в данной задаче SCAN предпочтительней, т.к. требуется гораздо меньше вычислений для получения результата. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.04.2010, 18:04 |
|
Помогите с представлением
|
|||
---|---|---|---|
#18+
Dima T Все-таки в данной задаче SCAN предпочтительней, т.к. требуется гораздо меньше вычислений для получения результата. Согласен, тот вариант, что я привел с аналитикой на Oracle работает также по приниципу одного СКАНА вместо трех - и оттого быстрее. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.04.2010, 19:41 |
|
Помогите с представлением
|
|||
---|---|---|---|
#18+
Код: plaintext
Сдесь у нас форум по фоксе или "просто треп" ? :) проходящий., ВладимирМ хватит их травмировать ) ... |
|||
:
Нравится:
Не нравится:
|
|||
21.04.2010, 18:11 |
|
|
start [/forum/topic.php?fid=41&msg=36588065&tid=1585382]: |
0ms |
get settings: |
8ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
38ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
51ms |
get tp. blocked users: |
1ms |
others: | 14ms |
total: | 144ms |
0 / 0 |