powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Сложный запрос сравнения
25 сообщений из 34, страница 1 из 2
Сложный запрос сравнения
    #38208306
Mikhails
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Друзья, добрый день!
Возникла сложная задачка.
Имеются две таблицы T1 и T2 в каждой таблице есть поля Id,Глубина От,Глубина до,Описание
Необходимо создать третью в которой для одинаковых ID и одинаковых глубин будут слиты в один столбец два описания.
ПРОБЛЕМА! Глубины не одинаковы, пример:
T1
ID Глубина от Глубина до Описание
1 0 10 Песок
1 10 20 Глина
1 20 30 Глина с переслоением
1 30 50 Суглинки

Т2
ID Глубина от Глубина до Описание
1 0 30 Примеси
1 30 60 Чистая

Получить нужно:
ID Глубина от Глубина до Описание
1 0 10 Песок,примеси
1 10 20 Глина,примеси
1 20 30 Глина с переслоением,примеси
1 30 50 Суглинки,чистая

Осложняется, что делается из под внешней программы работающей с базой в Access и использовать могу лишь Access Sql

Перепробовал всё, что знал.. но из-за разного количества интервалов не выходит ничего, буду благодарен за помощь и советы.
...
Рейтинг: 0 / 0
Сложный запрос сравнения
    #38208311
Озверин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mikhails,

похоже, что не одинаковы, а пересекаются, не?
...
Рейтинг: 0 / 0
Сложный запрос сравнения
    #38208314
cylindr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mikhails,

У вас ничего не получится, чем отличается
Mikhails1 20 30 Глина с переслоением

от
Mikhails1 30 50 Суглинки

Почему именно ко второй записи нужно прицеплять

Mikhails1 30 60 Чистая

?
...
Рейтинг: 0 / 0
Сложный запрос сравнения
    #38208322
Mikhails
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
cylindr,
Согласен, тут ещё одна "затычка" но возьмём к примеру, что необходимо "прицеплять" к верхнему интервалу.
...
Рейтинг: 0 / 0
Сложный запрос сравнения
    #38208325
Mikhails
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Интересует именно возможно ли организовать сравнение, с учётом неодинакового количества строк..
Я таких вариантов придумать не могу.., может быть "порезать" вторую таблицу на интервалы идентичные T1 опять же, как это сделать не ясно
...
Рейтинг: 0 / 0
Сложный запрос сравнения
    #38208327
Mikhails
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Озверин,
Даже не смотрю пока на наличие пересечений (хотя это возможно).
...
Рейтинг: 0 / 0
Сложный запрос сравнения
    #38208331
Фотография Программист-Любитель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
При всей непохожести по сути это задача матчинга по фифо. Есть много готовых решений но не джет скл, естественно, а на т-скл. Имеет смысл взять за основу и переделать.
...
Рейтинг: 0 / 0
Сложный запрос сравнения
    #38208336
Фотография Программист-Любитель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Могу подсказать на пальцах.

1. Выбрать все диапазоны от-до из первой таблицы.
2. Выбрать все диапазоны от-до из второй таблицы.
3. Объединить их юнионом.
4. Оставить тольо уникальные значений.
5. Соединить получившийся результат битвином с первой и второй таблицей, так, чтобы пересечения от-до результата и от-до таблиц были непустые.

Вопщем даже не особо сложно.
...
Рейтинг: 0 / 0
Сложный запрос сравнения
    #38208352
cylindr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Программист-Любитель,

В первой таблице 4 записи, во второй - 2, получить нужно - 4, у вас будет 2?
...
Рейтинг: 0 / 0
Сложный запрос сравнения
    #38208360
Mikhails
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
cylindr,Нужно именно 4.. к более точному описанию приписать более общее.
Возможно есть решение на VBA? и можно в самой базе Access создать что-либо для слияния этих описаний..
...
Рейтинг: 0 / 0
Сложный запрос сравнения
    #38208369
Фотография Программист-Любитель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нет. Вы не поняли. Прочитайте про квитовку/матчинг фифо.

Табл.1 Табл.20-100-510-205-1520-3015-35
С-По0-55-1010-1515-2020-3030-35
N Табл.1 Табл.210-5 из 0-100-525-10 из 0-105-10 из 5-15310-15 из 10-2010-15 из 5-15415-20 из 10-2015-20 из 15-35520-3020-30 из 15-356-30-35 из 15-35
...
Рейтинг: 0 / 0
Сложный запрос сравнения
    #38208414
Rivkin Dmitry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я что-то не понял наверное:

Код: sql
1.
2.
3.
SELECT T1.DepthFrom AS [Глубина от], T1.DepthTo AS [Глубина до], [T1Description] & ", " & [T2Description] AS Описание
FROM T1, T2
WHERE (((T1.DepthFrom) Between [T2].[DepthFrom] And [T2].[DepthTo]) AND ((T1.DepthTo) Between [T2].[DepthFrom] And [T2].[DepthTo]));
...
Рейтинг: 0 / 0
Сложный запрос сравнения
    #38208419
Rivkin Dmitry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А, да, я не понял, почему в обоих таблицах ID всюду еденицы... И почему в результирующем запросе тоже ID единицы, и, вообще, зачем они нужны
...
Рейтинг: 0 / 0
Сложный запрос сравнения
    #38208425
Mikhails
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Программист-Любитель,
Не совсем ясен один момент, при объединении UNION необходимо, чтобы совпадали ID в данных таблицах..
Объединение Inner Join срабатывает, но на выходе - каша
...
Рейтинг: 0 / 0
Сложный запрос сравнения
    #38208434
Mikhails
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Rivkin Dmitry,
Дмитрий, данные ID - номера скважин, они должны совпадать (естественно) при объединении описания интервалов.
Задача полностью такова - есть описания пород в скважинах в одной таблице - описание породы (более крупные интервалы) в другой описание минерализации в скважинах (более мелкие интервалы), нужна таблица, где будет по каждой скважине полное описание - Номер, интервал, описание (порода+минерализация)
...
Рейтинг: 0 / 0
Сложный запрос сравнения
    #38208496
s_ustinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mikhails, а в чем проблема?

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
Select
t1.id
,t1.glub_from
,t1.glub_to
,(t1.description + t2.description) as 'description'
from
t1 
join 
t2
on t1.id = t2.id 
and t1.glub_from >= t2.glub_from
and t1.glub_to <= t2.glub_to



Предполагается, что в t1 диапазоны всегда меньше чем в t2.


Есть нюанс - когда диапазон t1 пересекает диапазон t2.

T1
ID Глубина от Глубина до Описание
1 0 10 Песок
1 10 20 Глина
1 20 40 Глина с переслоением
1 40 50 Суглинки

Т2
ID Глубина от Глубина до Описание
1 0 30 Примеси
1 30 60 Чистая

но для этого случая надо решать. или мы разбиваем диапазоны
например так:
T1
ID Глубина от Глубина до Описание
1 0 10 Песок
1 10 20 Глина
1 20 30 Глина с переслоением
1 30 40 Глина с переслоением

1 40 50 Суглинки

Т2
ID Глубина от Глубина до Описание
1 0 30 Примеси
1 30 60 Чистая


или правим данные ручками для таких пересечений.
зачем тут фифо - вообще не понял

разбить диапазоны тоже можно селектом - ничего сложного.
...
Рейтинг: 0 / 0
Сложный запрос сравнения
    #38208545
Mikhails
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
s_ustinov, попробую и отпишусь о результатах
...
Рейтинг: 0 / 0
Сложный запрос сравнения
    #38208567
П-Л
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
s_ustinovзачем тут фифо - вообще не понял
Если хотя бы одна граница в более грубой таблице не совпадает ни с одной границе в более подробной таблице. Я специально давал пример, где первая таблица хранит свои куски, не укладывающиеся нацело во вторую.

Если такие случаи допустимы - то ФИФО однозначно. Случай, когда более детальная таблица обязательно укладывается нескоькими слоями в более грубую таблицу, можно рассматривать как частный случай ФИФО (при продажах реализуется то, что было куплено несколькими мелкими партиями подчистую).
...
Рейтинг: 0 / 0
Сложный запрос сравнения
    #38208690
s_ustinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
П-Лs_ustinovзачем тут фифо - вообще не понял
Если хотя бы одна граница в более грубой таблице не совпадает ни с одной границе в более подробной таблице. Я специально давал пример, где первая таблица хранит свои куски, не укладывающиеся нацело во вторую.

Если такие случаи допустимы - то ФИФО однозначно. Случай, когда более детальная таблица обязательно укладывается нескоькими слоями в более грубую таблицу, можно рассматривать как частный случай ФИФО (при продажах реализуется то, что было куплено несколькими мелкими партиями подчистую).


????????
зачем такие сложности???
разбиваем первую так, чтобы диапазон в первой таблице гарантированно укладывался во вторую - и все.
проблема, это когда в таблицах в диапазонах "дырки":
1 10 15 Глина
1 20 30 Глина с переслоением
1 35 50 Суглинки

но насколько я понимаю, это явно ошибочные данные, и их чистка является немного другой задачей.

а несовпадение диапазонов лечится намного проще:

Код: sql
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.
Select distinct
t1.id
,t1.glub_from
,t2.glub_from
,t1.description
from
t1 
join 
t2
on t1.id = t2.id 
and t1.glub_from >= t2.glub_from
and t1.glub_to > t2.glub_to
and t1.glub_from < t2.glub_to

union

Select distinct
t1.id
,t2.glub_from
,t1.glub_to
,t1.description
from
t1 
join 
t2
on t1.id = t2.id 
and t1.glub_from >= t2.glub_from
and t1.glub_to > t2.glub_to
and t1.glub_from < t2.glub_to

union 

Select  distinct
t1.id
,t1.glub_from
,t1.glub_to
,t1.description
from
t1 
join 
t2
on t1.id = t2.id 
and t1.glub_from >= t2.glub_from
and t1.glub_to <= t2.glub_to



в результате получаем t1, разбитую на нужные нам диапазоны
...
Рейтинг: 0 / 0
Сложный запрос сравнения
    #38209075
Mikhails
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Переписал скрипт, ругается на неверный синтаксис в Join, переписал снова та же тема.
В принципе подход понятен, но реализация, как то не получается.
Плюс нашёлся ещё один подводный камень.. в Т1 может быть ситуация, когда на один и тот же интервал два разных описания (и это не ошибка, там внутри процентное содержание записано). Каждому их них нужно приписать более "грубое" значение из Т2.
Интервалы в Т2 обычно более крупные чем, в Т1 например 0-70, 70 -100. В Т1 при этом 0-10,10-20,20-30, и т.д.
Бьюсь с задачей целый день.. пока без успешно
...
Рейтинг: 0 / 0
Сложный запрос сравнения
    #38209109
s_ustinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MikhailsПереписал скрипт, ругается на неверный синтаксис в Join, переписал снова та же тема.
В принципе подход понятен, но реализация, как то не получается.
Плюс нашёлся ещё один подводный камень.. в Т1 может быть ситуация, когда на один и тот же интервал два разных описания (и это не ошибка, там внутри процентное содержание записано). Каждому их них нужно приписать более "грубое" значение из Т2.
Интервалы в Т2 обычно более крупные чем, в Т1 например 0-70, 70 -100. В Т1 при этом 0-10,10-20,20-30, и т.д.
Бьюсь с задачей целый день.. пока без успешно
С синтаксисом я не помогу - на sql2008r2 такое работает, а access ставить себе не буду
а два разных описания - не понятно, о чем речь. приводи пример с данными.
...
Рейтинг: 0 / 0
Сложный запрос сравнения
    #38209263
П-Л
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MikhailsПереписал скрипт, ругается на неверный синтаксис в Join, переписал снова та же тема.
В принципе подход понятен, но реализация, как то не получается.
Плюс нашёлся ещё один подводный камень.. в Т1 может быть ситуация, когда на один и тот же интервал два разных описания (и это не ошибка, там внутри процентное содержание записано). Каждому их них нужно приписать более "грубое" значение из Т2.
Интервалы в Т2 обычно более крупные чем, в Т1 например 0-70, 70 -100. В Т1 при этом 0-10,10-20,20-30 , и т.д.
Бьюсь с задачей целый день.. пока без успешно
1. Это усложнение модели ваших данных. Ваша Т1 распадается на две таблицы Т11 и Т12, в первой - перечень интервалов, во второй - описания интервалов, одному интервалу соответствует одно или БОЛЕЕ одного описания. Нормальная связь 1:М.
2. Эта проблема решена в моем примере и моем алгоритме запросов по ФИФО.

Бейтесь дальше. Все ваши "проблемы" - обычные несложные задачи.
...
Рейтинг: 0 / 0
Сложный запрос сравнения
    #38209268
П-Л
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
s_ustinovзачем такие сложности???Жизненные реалии сложные. Я предлагаю сделать решение, охватывающее особенности предметной области, а вы - подогнать постановку задачи под упрощенный алгоритм ? ФИФО давно обсосана со всех сторон в учетных системах. Почему не воспользоваться этой моделью в данном случае, который как раз в нее укладывается ?
...
Рейтинг: 0 / 0
Сложный запрос сравнения
    #38209320
s_ustinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
П-ЛЯ предлагаю сделать решение, охватывающее особенности предметной области, а вы - подогнать постановку задачи под упрощенный алгоритм ? ФИФО давно обсосана со всех сторон в учетных системах. Почему не воспользоваться этой моделью в данном случае, который как раз в нее укладывается ?
ФИФО предполагает наличие временной шкалы и эта концепция применима именно в системах, где состояние изменяется во времени. Задача ТС статична - у нас в некий момент времени появляется готовый набор данных для скважины. И пытаться применить сюда фифо наверно можно, но это запутывает при анализе проблемы. Ведь тут нет такого, что сначала появляется запись

T1
ID Глубина от Глубина до Описание
1 0 10 Песок

потом
T1
ID Глубина от Глубина до Описание
1 10 20 Глина

потом
T1
ID Глубина от Глубина до Описание
1 20 30 Глина с переслоением

и только потом
Т2
ID Глубина от Глубина до Описание
1 0 30 Примеси


весь набор данных появляется одномоментно, и алгоритм обработки надо строить исходя из этого
...
Рейтинг: 0 / 0
Сложный запрос сравнения
    #38209339
П-Л
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
s_ustinovвесь набор данных появляется одномоментно, и алгоритм обработки надо строить исходя из этого
При чем тут вермя ? Вы не видите, что глубина от-до в данной задаче точно соответствует нарастающему итогу ФИФО ?
Табл.1 Табл.2 0-10 0-5 10-20 5-15 20-30 15-35
Табл.1 Табл.2 Купили 10 (0-10) Продали 5 (0-5)К 10 купили еще 10 всего 20 (10-20) Уже продали 5 еще продали 10 всего 15 (5-15)К 20 купили еще 10 всего 30 (20-30) Уже продали 15 еще продали 20 всего 35 (15-35)
Посмотрите логику моего примера выше по топику - она полностью находит все соответствия двух таблиц. И она является логикой ФИФО.
...
Рейтинг: 0 / 0
25 сообщений из 34, страница 1 из 2
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Сложный запрос сравнения
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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