Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
определить ближайшие min & max значения для заданного
|
|||
|---|---|---|---|
|
#18+
Здравствуйте, помогите корректо составить запрос следующей ф-ности: есть некая таблица состояний объекта: stateid|stateDate|state где stateDate - дата изменения состояния объекта, state - новое значение состояния необходимо, для произвольно заданной даты определить состояние этого объекта (точнее, состояние, в катором находился объект на произвольно заданую дату) например, для 01.12.2006 - income 02.12.2006 - in_transfering 05.12.2006 - arrived 05.12.2006 - stored для заданной даты 03.12.2006 - объект находится в состоянии in_transfering когда же для 05.12.2006 - stored Спасибо! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.02.2008, 16:28 |
|
||
|
определить ближайшие min & max значения для заданного
|
|||
|---|---|---|---|
|
#18+
...ну тогда хоть куда копать подскажите? я нет перерыл, но везде обычные between попадают, давайте упростим: как определить ближайшие min & max значения для заданного то есть без всяких изменений состояния в один и тот же день, как это сделать, например, просто для последовательности: заданное число: 15 ряд чисел: 1,2,8,10,22,25,45 мин и макс, для этого случая должно быть: 10 и 22 соотвественно... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.02.2008, 17:12 |
|
||
|
определить ближайшие min & max значения для заданного
|
|||
|---|---|---|---|
|
#18+
Господа, ну что, никаких предложений?????? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.02.2008, 18:00 |
|
||
|
определить ближайшие min & max значения для заданного
|
|||
|---|---|---|---|
|
#18+
1. В твоём примере есть 2 одинаковых даты - нехорошо... Добавляй ЕЩЁ признак, по которому их упорядочить. StateId? 2. Нужно одним SELECT'ом - или ХП подойдёт? вариантов решения - море... 3. Пример: SELECT FIRST 1 state FROM States WHERE stateDate <= p_MyDate ORDER BY stateDate DESC , stateid DESC ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.02.2008, 18:53 |
|
||
|
определить ближайшие min & max значения для заданного
|
|||
|---|---|---|---|
|
#18+
select state from States where stateid = ( select max(stateid) from States where stateDate <= mdy(12,3,2006) ); по идее, будет побыстрее. В любом случае нужен индекс по stateDate. -- select (select max(num) from Num_List where num < 15) min_num, (select min(num) from Num_List where num > 15) max_num from systables where tabid = 1; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.02.2008, 22:55 |
|
||
|
определить ближайшие min & max значения для заданного
|
|||
|---|---|---|---|
|
#18+
Julian по идее, будет побыстрее. ;не будет, медленнее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.02.2008, 08:25 |
|
||
|
определить ближайшие min & max значения для заданного
|
|||
|---|---|---|---|
|
#18+
АнатоЛой1. В твоём примере есть 2 одинаковых даты - нехорошо... Это не "нехорошо". Это плохо. Потому что при таких раскладах (изменение статуса чаще чем раз в день) сам по себе вопрос "Каков был статус заданного объекта на дату Х?" лишен смысла (в общем случае). Арсентийнапример, для 01.12.2006 - income 02.12.2006 - in_transfering 05.12.2006 - arrived 05.12.2006 - stored когда же для 05.12.2006 - storedЭто, скажите мне, откуда следует?! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.02.2008, 21:17 |
|
||
|
определить ближайшие min & max значения для заданного
|
|||
|---|---|---|---|
|
#18+
Журавлев Денисне будет, медленнее. Почему? Поиск максимума дороже сортировки по двум полям? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.02.2008, 01:00 |
|
||
|
определить ближайшие min & max значения для заданного
|
|||
|---|---|---|---|
|
#18+
bk0010 Журавлев Денисне будет, медленнее. Почему? Поиск максимума дороже сортировки по двум полям?два захода в таблицу дороже чем один. Сортировки там не должно быть, в смысле у меня бы не было, проход по индексу с конца (наверно нужно +first_rows для верности, оптимизатор FIRST 1 не видит) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.02.2008, 08:41 |
|
||
|
определить ближайшие min & max значения для заданного
|
|||
|---|---|---|---|
|
#18+
Или два захода (очень быстрые и легкие, кстати), или сортировка. Сортировка всегда хуже, и по количеству обращений к данным (индексу) проигрывает значительно. Директива вряд ли существенно поможет. Можно посмотреть план на какой-нибудь таблице, но вообще-то такая конструкция с некоррелированным подзапросом очень хорошо себя показывает, в моей практике по крайней мере. Если Вы говорите о каком-то третьем варианте - без сортировки и без подзапроса, то было бы интересно его показать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.03.2008, 00:59 |
|
||
|
определить ближайшие min & max значения для заданного
|
|||
|---|---|---|---|
|
#18+
JulianИли два захода (очень быстрые и легкие, кстати), или сортировка. Сортировка всегда хуже, и по количеству обращений к данным (индексу) проигрывает значительно. Директива вряд ли существенно поможет. Можно посмотреть план на какой-нибудь таблице, но вообще-то такая конструкция с некоррелированным подзапросом очень хорошо себя показывает, в моей практике по крайней мере. Если Вы говорите о каком-то третьем варианте - без сортировки и без подзапроса, то было бы интересно его показать.Не ссорьтесь, горячие финские парни!!! Погодите обсуждать технические детали. У человека серьезные проблемы с пониманием ситуации, а вы уже в тюнинг углубились! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.03.2008, 11:33 |
|
||
|
определить ближайшие min & max значения для заданного
|
|||
|---|---|---|---|
|
#18+
Евгений ФадеевНе ссорьтесь, горячие финские парни!!! Погодите обсуждать технические детали. У человека серьезные проблемы с пониманием ситуации, а вы уже в тюнинг углубились!Мы не ссоримся, мы просто пытаемся померить. Топикстартер и его проблемы нам мало интересны, тем более он наверно все давно решил. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. Проблема в том, что лишь последние версии информикса позволяют first в подзапросах. Да и еще: своим программерам я рекомендую делать два поля дата_начала(default 0101001) и дата_конца(31129999), нужна конечно проверка непересекаемости периодов, но запросы становятся красивее between. Вообще можно сделать вью и instead of триггер который будет заполнять дата_конца. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.03.2008, 12:15 |
|
||
|
определить ближайшие min & max значения для заданного
|
|||
|---|---|---|---|
|
#18+
Журавлев Денис Код: plaintext 1. 2. 3. 4. 5. 6. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Я , наверное, глючу, но именно 1106 строк и должно вернуться исходя из твоих условий ? (first 1 ведь будет применено только в конце, для готовой выборки ?) И как ты определил неверность стоимости (этих условных "попугаев") ? Индексные и табличные страницы то читать нужно (key only нет). Журавлев Денис Код: plaintext 1. 2. 3. 4. Я правильно понял, что этот коммент относится к первому запросу ? Мне он идеальным не показался. А вот второй кажется значительно быстрее :) А как все таки на практике на разных версиях ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.03.2008, 13:47 |
|
||
|
определить ближайшие min & max значения для заданного
|
|||
|---|---|---|---|
|
#18+
Журавлев ДенисДа и еще: своим программерам я рекомендую делать два поля дата_начала(default 0101001) и дата_конца(31129999), нужна конечно проверка непересекаемости периодов, но запросы становятся красивее between. Вообще можно сделать вью и instead of триггер который будет заполнять дата_конца.Это называется темпоральная модель. Именно для таких случаев и используется. Только, возвращаясь к началу, у автора большие проблемы именно в постановке (там до решения далеко еще). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.03.2008, 13:55 |
|
||
|
определить ближайшие min & max значения для заданного
|
|||
|---|---|---|---|
|
#18+
vasilis Я , наверное, глючу, но именно 1106 строк и должно вернуться исходя из твоих условий ? (first 1 ведь будет применено только в конце, для готовой выборки ?) Спустится по индексу 3, сходит в таблицу 1, стоп-конец. vasilis И как ты определил неверность стоимости (этих условных "попугаев") ? Индексные и табличные страницы то читать нужно (key only нет). IMHO: Его стоимость 3+1=4, строк вернется 1. vasilisЯ правильно понял, что этот коммент относится к первому запросу ? Мне он идеальным не показался. А вот второй кажется значительно быстрее :) А как все таки на практике на разных версиях ?К первому там один шаг, один заход в таблицу, во втором случае два шага, стоимость 7. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. > time echo "execute procedure test_curs1(100000);"|dbaccess a real 0m4.566s > time echo "execute procedure test_curs1(100000);"|dbaccess a real 0m4.782s > time echo "execute procedure test_curs2(100000);"|dbaccess a real 0m8.160s > time echo "execute procedure test_curs2(100000);"|dbaccess a real 0m8.540s Кто еще что хочет померять? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.03.2008, 14:47 |
|
||
|
определить ближайшие min & max значения для заданного
|
|||
|---|---|---|---|
|
#18+
и что интересно, если сделать индекс по обоим полям, получим желаемый Index Keys: d val (Key-Only) Но временные показатели ухудшаются до 5 и 9. Т.е. не стоит индексировать длинные поля типа decimal(20,2). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.03.2008, 15:12 |
|
||
|
определить ближайшие min & max значения для заданного
|
|||
|---|---|---|---|
|
#18+
Журавлев ДенисТ.е. не стоит индексировать длинные поля типа decimal(20,2). точнее мне при моих настройках в этом случае не стоит индексировать длинные поля типа decimal(20,2). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.03.2008, 15:14 |
|
||
|
|

start [/forum/topic.php?fid=44&fpage=38&tid=1608158]: |
0ms |
get settings: |
7ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
38ms |
get topic data: |
9ms |
get forum data: |
3ms |
get page messages: |
49ms |
get tp. blocked users: |
2ms |
| others: | 223ms |
| total: | 351ms |

| 0 / 0 |
