Гость
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / помогите.......... / 11 сообщений из 11, страница 1 из 1
23.09.2002, 11:32
    #32052298
Nickola
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите..........
Есть поле с численными данными.
Как найти максимальную разницу между ближайшими значениями?
Причем подобное вычисление надо осуществить в запросе т.е. база удаленная и качать ее всю не резонно.
...
Рейтинг: 0 / 0
23.09.2002, 12:10
    #32052308
MichaelGK
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите..........
Помогли бы, если бы поняли задачу...
...
Рейтинг: 0 / 0
23.09.2002, 12:23
    #32052314
Nickola
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите..........
Т.е. надо последновательно сравнить два соседних значения, в том порядке в каком они в идут таблице.

Например данные:
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)
...
Рейтинг: 0 / 0
23.09.2002, 13:11
    #32052341
pima
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите..........
Да легко! С помощью курсора и временной таблицы.

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

вот примерно таким макаром.
...
Рейтинг: 0 / 0
23.09.2002, 13:13
    #32052343
pima
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите..........
(т. е. для таблицы из 20 строк этот код возвратит 19).
...
Рейтинг: 0 / 0
23.09.2002, 13:19
    #32052351
pima
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите..........
ой........ sorry........ это для SQL Server
хотя курсоры и временные таблицы - вещь стандартная, должны быть и в Oracle
...
Рейтинг: 0 / 0
23.09.2002, 14:01
    #32052377
Nickola
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите..........
Ну вобщем весь вопрос состоял в том как это седать не качая всей базы и имея ее только для чтения. Судя по всему нельзя.
А так не хотелось качать 280 тыс. записей чтобы выбрать от туда всего сотню.
А имея ее локально задача вообще не предстовляет проблемы.
...
Рейтинг: 0 / 0
23.09.2002, 14:32
    #32052385
MichaelGK
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите..........
Не торопитесь огорчаться, поясните:
1. Так мы с чем имеем дело... MSSQL или Oracle?
2. В вашем примере, что должно вернуться? набор количеством на одну запись меньше чем исходный (из примера это можно так предполагать) или запись 5, т.к. у нее максимальная разность 12. Если бы было несколько записей с одинаковой максимальной разностью, то что?
3. Идентификаторы записей идут подряд или есть пропуски в номерах?
Впрочем, важнейшим здесь является вопрос 2.
...
Рейтинг: 0 / 0
23.09.2002, 15:23
    #32052398
Nickola
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите..........
1.Мы имеем MSAccess подключенный к MySQL серверу.
2.Вообщето вренуть надо набор значений разностей которые превышают какой либо порог.
Т.е. если порог=9 то в данном случае вернется 10,12.
3.Ключевого поля как такового нет вообще. (индекс не построен) А записи берем в порядке убывания (т.е. возвращенное значения всегда положительно либо 0)
...
Рейтинг: 0 / 0
23.09.2002, 15:55
    #32052408
MichaelGK
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите..........
Так я четко всего и не понял, но если добавить в исходную таблицу столбец РК идентити у вас записи пронуменруются и тогда можно сделать так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
SELECT DISTINCT Rsn = ABS(T1.col - (
		SELECT TOP  1  T2.col
		FROM   temptest T2
		WHERE  T1.PK < T2.PK))
FROM temptest T1
WHERE ABS(T1.col - (
		SELECT TOP  1  T2.col
		FROM   temptest T2
		WHERE  T1.PK < T2.PK)) >  9 

т.е. для вашего примера результат получен... Буду рад, если смог помочь.
...
Рейтинг: 0 / 0
23.09.2002, 16:30
    #32052425
Nickola
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите..........
За это время я уже скачал всю базу и обработал.
Но, тем не мение подобноя информация в дальнейшим мне очень пригодится.

Огоромное спасибо.
...
Рейтинг: 0 / 0
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / помогите.......... / 11 сообщений из 11, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]