powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / помогите..........
11 сообщений из 11, страница 1 из 1
помогите..........
    #32052298
Nickola
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть поле с численными данными.
Как найти максимальную разницу между ближайшими значениями?
Причем подобное вычисление надо осуществить в запросе т.е. база удаленная и качать ее всю не резонно.
...
Рейтинг: 0 / 0
помогите..........
    #32052308
Фотография MichaelGK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Помогли бы, если бы поняли задачу...
...
Рейтинг: 0 / 0
помогите..........
    #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
помогите..........
    #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
помогите..........
    #32052343
pima
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
(т. е. для таблицы из 20 строк этот код возвратит 19).
...
Рейтинг: 0 / 0
помогите..........
    #32052351
pima
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ой........ sorry........ это для SQL Server
хотя курсоры и временные таблицы - вещь стандартная, должны быть и в Oracle
...
Рейтинг: 0 / 0
помогите..........
    #32052377
Nickola
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ну вобщем весь вопрос состоял в том как это седать не качая всей базы и имея ее только для чтения. Судя по всему нельзя.
А так не хотелось качать 280 тыс. записей чтобы выбрать от туда всего сотню.
А имея ее локально задача вообще не предстовляет проблемы.
...
Рейтинг: 0 / 0
помогите..........
    #32052385
Фотография MichaelGK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не торопитесь огорчаться, поясните:
1. Так мы с чем имеем дело... MSSQL или Oracle?
2. В вашем примере, что должно вернуться? набор количеством на одну запись меньше чем исходный (из примера это можно так предполагать) или запись 5, т.к. у нее максимальная разность 12. Если бы было несколько записей с одинаковой максимальной разностью, то что?
3. Идентификаторы записей идут подряд или есть пропуски в номерах?
Впрочем, важнейшим здесь является вопрос 2.
...
Рейтинг: 0 / 0
помогите..........
    #32052398
Nickola
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
1.Мы имеем MSAccess подключенный к MySQL серверу.
2.Вообщето вренуть надо набор значений разностей которые превышают какой либо порог.
Т.е. если порог=9 то в данном случае вернется 10,12.
3.Ключевого поля как такового нет вообще. (индекс не построен) А записи берем в порядке убывания (т.е. возвращенное значения всегда положительно либо 0)
...
Рейтинг: 0 / 0
помогите..........
    #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
помогите..........
    #32052425
Nickola
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
За это время я уже скачал всю базу и обработал.
Но, тем не мение подобноя информация в дальнейшим мне очень пригодится.

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


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