|
помогите..........
|
|||
---|---|---|---|
#18+
Есть поле с численными данными. Как найти максимальную разницу между ближайшими значениями? Причем подобное вычисление надо осуществить в запросе т.е. база удаленная и качать ее всю не резонно. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.09.2002, 11:32 |
|
помогите..........
|
|||
---|---|---|---|
#18+
Помогли бы, если бы поняли задачу... ... |
|||
:
Нравится:
Не нравится:
|
|||
23.09.2002, 12:10 |
|
помогите..........
|
|||
---|---|---|---|
#18+
Т.е. надо последновательно сравнить два соседних значения, в том порядке в каком они в идут таблице. Например данные: 1:10 2:20 3:21 4:25 5:28 6:40 мне надо получить: 1:10 (20-10) 2:1 (21-20) 3:4 (25-24) 4:3 (28-25) 5:12 (40-28) ... |
|||
:
Нравится:
Не нравится:
|
|||
23.09.2002, 12:23 |
|
помогите..........
|
|||
---|---|---|---|
#18+
Да легко! С помощью курсора и временной таблицы. create table #temp(Raznica int) declare AllValues cursor for select ПолеССоседнимиЗначениями from ЕнтаТаблица open AllValues declare @prevValue int, @nextValue int fetch next from AllValues into @prevValue --извлекли 1-ю строку while @@fetch_status=0 begin --бегать по курсору до конца fetch next from AllValues into @nextValue if @@fetch_status=0 --это чтобы не вставлялась лишняя строка при последней итерации insert into #temp(Raznica) values(@nextValue-@prevValue) set @prevValue=@nextValue end close AllValues deallocate AllValues --закрываем курсор и освобождаем после него память select * from #temp --здеся результат drop table #temp вот примерно таким макаром. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.09.2002, 13:11 |
|
помогите..........
|
|||
---|---|---|---|
#18+
(т. е. для таблицы из 20 строк этот код возвратит 19). ... |
|||
:
Нравится:
Не нравится:
|
|||
23.09.2002, 13:13 |
|
помогите..........
|
|||
---|---|---|---|
#18+
ой........ sorry........ это для SQL Server хотя курсоры и временные таблицы - вещь стандартная, должны быть и в Oracle ... |
|||
:
Нравится:
Не нравится:
|
|||
23.09.2002, 13:19 |
|
помогите..........
|
|||
---|---|---|---|
#18+
Ну вобщем весь вопрос состоял в том как это седать не качая всей базы и имея ее только для чтения. Судя по всему нельзя. А так не хотелось качать 280 тыс. записей чтобы выбрать от туда всего сотню. А имея ее локально задача вообще не предстовляет проблемы. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.09.2002, 14:01 |
|
помогите..........
|
|||
---|---|---|---|
#18+
Не торопитесь огорчаться, поясните: 1. Так мы с чем имеем дело... MSSQL или Oracle? 2. В вашем примере, что должно вернуться? набор количеством на одну запись меньше чем исходный (из примера это можно так предполагать) или запись 5, т.к. у нее максимальная разность 12. Если бы было несколько записей с одинаковой максимальной разностью, то что? 3. Идентификаторы записей идут подряд или есть пропуски в номерах? Впрочем, важнейшим здесь является вопрос 2. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.09.2002, 14:32 |
|
помогите..........
|
|||
---|---|---|---|
#18+
1.Мы имеем MSAccess подключенный к MySQL серверу. 2.Вообщето вренуть надо набор значений разностей которые превышают какой либо порог. Т.е. если порог=9 то в данном случае вернется 10,12. 3.Ключевого поля как такового нет вообще. (индекс не построен) А записи берем в порядке убывания (т.е. возвращенное значения всегда положительно либо 0) ... |
|||
:
Нравится:
Не нравится:
|
|||
23.09.2002, 15:23 |
|
помогите..........
|
|||
---|---|---|---|
#18+
Так я четко всего и не понял, но если добавить в исходную таблицу столбец РК идентити у вас записи пронуменруются и тогда можно сделать так: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9.
т.е. для вашего примера результат получен... Буду рад, если смог помочь. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.09.2002, 15:55 |
|
|
start [/forum/topic.php?fid=45&tid=1683268]: |
0ms |
get settings: |
8ms |
get forum list: |
11ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
148ms |
get topic data: |
13ms |
get forum data: |
2ms |
get page messages: |
52ms |
get tp. blocked users: |
2ms |
others: | 8ms |
total: | 250ms |
0 / 0 |