|
Сложный запрос сравнения
|
|||
---|---|---|---|
#18+
Друзья, добрый день! Возникла сложная задачка. Имеются две таблицы 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 Перепробовал всё, что знал.. но из-за разного количества интервалов не выходит ничего, буду благодарен за помощь и советы. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.04.2013, 09:19 |
|
Сложный запрос сравнения
|
|||
---|---|---|---|
#18+
Mikhails, похоже, что не одинаковы, а пересекаются, не? ... |
|||
:
Нравится:
Не нравится:
|
|||
02.04.2013, 09:22 |
|
Сложный запрос сравнения
|
|||
---|---|---|---|
#18+
Mikhails, У вас ничего не получится, чем отличается Mikhails1 20 30 Глина с переслоением от Mikhails1 30 50 Суглинки Почему именно ко второй записи нужно прицеплять Mikhails1 30 60 Чистая ? ... |
|||
:
Нравится:
Не нравится:
|
|||
02.04.2013, 09:24 |
|
Сложный запрос сравнения
|
|||
---|---|---|---|
#18+
cylindr, Согласен, тут ещё одна "затычка" но возьмём к примеру, что необходимо "прицеплять" к верхнему интервалу. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.04.2013, 09:32 |
|
Сложный запрос сравнения
|
|||
---|---|---|---|
#18+
Интересует именно возможно ли организовать сравнение, с учётом неодинакового количества строк.. Я таких вариантов придумать не могу.., может быть "порезать" вторую таблицу на интервалы идентичные T1 опять же, как это сделать не ясно ... |
|||
:
Нравится:
Не нравится:
|
|||
02.04.2013, 09:34 |
|
Сложный запрос сравнения
|
|||
---|---|---|---|
#18+
Озверин, Даже не смотрю пока на наличие пересечений (хотя это возможно). ... |
|||
:
Нравится:
Не нравится:
|
|||
02.04.2013, 09:35 |
|
Сложный запрос сравнения
|
|||
---|---|---|---|
#18+
При всей непохожести по сути это задача матчинга по фифо. Есть много готовых решений но не джет скл, естественно, а на т-скл. Имеет смысл взять за основу и переделать. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.04.2013, 09:38 |
|
Сложный запрос сравнения
|
|||
---|---|---|---|
#18+
Могу подсказать на пальцах. 1. Выбрать все диапазоны от-до из первой таблицы. 2. Выбрать все диапазоны от-до из второй таблицы. 3. Объединить их юнионом. 4. Оставить тольо уникальные значений. 5. Соединить получившийся результат битвином с первой и второй таблицей, так, чтобы пересечения от-до результата и от-до таблиц были непустые. Вопщем даже не особо сложно. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.04.2013, 09:40 |
|
Сложный запрос сравнения
|
|||
---|---|---|---|
#18+
Программист-Любитель, В первой таблице 4 записи, во второй - 2, получить нужно - 4, у вас будет 2? ... |
|||
:
Нравится:
Не нравится:
|
|||
02.04.2013, 09:50 |
|
Сложный запрос сравнения
|
|||
---|---|---|---|
#18+
cylindr,Нужно именно 4.. к более точному описанию приписать более общее. Возможно есть решение на VBA? и можно в самой базе Access создать что-либо для слияния этих описаний.. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.04.2013, 09:55 |
|
Сложный запрос сравнения
|
|||
---|---|---|---|
#18+
Нет. Вы не поняли. Прочитайте про квитовку/матчинг фифо. Табл.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 ... |
|||
:
Нравится:
Не нравится:
|
|||
02.04.2013, 10:02 |
|
Сложный запрос сравнения
|
|||
---|---|---|---|
#18+
Я что-то не понял наверное: Код: sql 1. 2. 3.
... |
|||
:
Нравится:
Не нравится:
|
|||
02.04.2013, 10:19 |
|
Сложный запрос сравнения
|
|||
---|---|---|---|
#18+
А, да, я не понял, почему в обоих таблицах ID всюду еденицы... И почему в результирующем запросе тоже ID единицы, и, вообще, зачем они нужны ... |
|||
:
Нравится:
Не нравится:
|
|||
02.04.2013, 10:22 |
|
Сложный запрос сравнения
|
|||
---|---|---|---|
#18+
Программист-Любитель, Не совсем ясен один момент, при объединении UNION необходимо, чтобы совпадали ID в данных таблицах.. Объединение Inner Join срабатывает, но на выходе - каша ... |
|||
:
Нравится:
Не нравится:
|
|||
02.04.2013, 10:23 |
|
Сложный запрос сравнения
|
|||
---|---|---|---|
#18+
Rivkin Dmitry, Дмитрий, данные ID - номера скважин, они должны совпадать (естественно) при объединении описания интервалов. Задача полностью такова - есть описания пород в скважинах в одной таблице - описание породы (более крупные интервалы) в другой описание минерализации в скважинах (более мелкие интервалы), нужна таблица, где будет по каждой скважине полное описание - Номер, интервал, описание (порода+минерализация) ... |
|||
:
Нравится:
Не нравится:
|
|||
02.04.2013, 10:26 |
|
Сложный запрос сравнения
|
|||
---|---|---|---|
#18+
Mikhails, а в чем проблема? Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
Предполагается, что в 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 Чистая или правим данные ручками для таких пересечений. зачем тут фифо - вообще не понял разбить диапазоны тоже можно селектом - ничего сложного. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.04.2013, 10:48 |
|
Сложный запрос сравнения
|
|||
---|---|---|---|
#18+
s_ustinov, попробую и отпишусь о результатах ... |
|||
:
Нравится:
Не нравится:
|
|||
02.04.2013, 11:08 |
|
Сложный запрос сравнения
|
|||
---|---|---|---|
#18+
s_ustinovзачем тут фифо - вообще не понял Если хотя бы одна граница в более грубой таблице не совпадает ни с одной границе в более подробной таблице. Я специально давал пример, где первая таблица хранит свои куски, не укладывающиеся нацело во вторую. Если такие случаи допустимы - то ФИФО однозначно. Случай, когда более детальная таблица обязательно укладывается нескоькими слоями в более грубую таблицу, можно рассматривать как частный случай ФИФО (при продажах реализуется то, что было куплено несколькими мелкими партиями подчистую). ... |
|||
:
Нравится:
Не нравится:
|
|||
02.04.2013, 11:14 |
|
Сложный запрос сравнения
|
|||
---|---|---|---|
#18+
П-Л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.
в результате получаем t1, разбитую на нужные нам диапазоны ... |
|||
:
Нравится:
Не нравится:
|
|||
02.04.2013, 11:56 |
|
Сложный запрос сравнения
|
|||
---|---|---|---|
#18+
Переписал скрипт, ругается на неверный синтаксис в Join, переписал снова та же тема. В принципе подход понятен, но реализация, как то не получается. Плюс нашёлся ещё один подводный камень.. в Т1 может быть ситуация, когда на один и тот же интервал два разных описания (и это не ошибка, там внутри процентное содержание записано). Каждому их них нужно приписать более "грубое" значение из Т2. Интервалы в Т2 обычно более крупные чем, в Т1 например 0-70, 70 -100. В Т1 при этом 0-10,10-20,20-30, и т.д. Бьюсь с задачей целый день.. пока без успешно ... |
|||
:
Нравится:
Не нравится:
|
|||
02.04.2013, 14:03 |
|
Сложный запрос сравнения
|
|||
---|---|---|---|
#18+
MikhailsПереписал скрипт, ругается на неверный синтаксис в Join, переписал снова та же тема. В принципе подход понятен, но реализация, как то не получается. Плюс нашёлся ещё один подводный камень.. в Т1 может быть ситуация, когда на один и тот же интервал два разных описания (и это не ошибка, там внутри процентное содержание записано). Каждому их них нужно приписать более "грубое" значение из Т2. Интервалы в Т2 обычно более крупные чем, в Т1 например 0-70, 70 -100. В Т1 при этом 0-10,10-20,20-30, и т.д. Бьюсь с задачей целый день.. пока без успешно С синтаксисом я не помогу - на sql2008r2 такое работает, а access ставить себе не буду а два разных описания - не понятно, о чем речь. приводи пример с данными. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.04.2013, 14:15 |
|
Сложный запрос сравнения
|
|||
---|---|---|---|
#18+
MikhailsПереписал скрипт, ругается на неверный синтаксис в Join, переписал снова та же тема. В принципе подход понятен, но реализация, как то не получается. Плюс нашёлся ещё один подводный камень.. в Т1 может быть ситуация, когда на один и тот же интервал два разных описания (и это не ошибка, там внутри процентное содержание записано). Каждому их них нужно приписать более "грубое" значение из Т2. Интервалы в Т2 обычно более крупные чем, в Т1 например 0-70, 70 -100. В Т1 при этом 0-10,10-20,20-30 , и т.д. Бьюсь с задачей целый день.. пока без успешно 1. Это усложнение модели ваших данных. Ваша Т1 распадается на две таблицы Т11 и Т12, в первой - перечень интервалов, во второй - описания интервалов, одному интервалу соответствует одно или БОЛЕЕ одного описания. Нормальная связь 1:М. 2. Эта проблема решена в моем примере и моем алгоритме запросов по ФИФО. Бейтесь дальше. Все ваши "проблемы" - обычные несложные задачи. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.04.2013, 15:07 |
|
Сложный запрос сравнения
|
|||
---|---|---|---|
#18+
s_ustinovзачем такие сложности???Жизненные реалии сложные. Я предлагаю сделать решение, охватывающее особенности предметной области, а вы - подогнать постановку задачи под упрощенный алгоритм ? ФИФО давно обсосана со всех сторон в учетных системах. Почему не воспользоваться этой моделью в данном случае, который как раз в нее укладывается ? ... |
|||
:
Нравится:
Не нравится:
|
|||
02.04.2013, 15:11 |
|
Сложный запрос сравнения
|
|||
---|---|---|---|
#18+
П-ЛЯ предлагаю сделать решение, охватывающее особенности предметной области, а вы - подогнать постановку задачи под упрощенный алгоритм ? ФИФО давно обсосана со всех сторон в учетных системах. Почему не воспользоваться этой моделью в данном случае, который как раз в нее укладывается ? ФИФО предполагает наличие временной шкалы и эта концепция применима именно в системах, где состояние изменяется во времени. Задача ТС статична - у нас в некий момент времени появляется готовый набор данных для скважины. И пытаться применить сюда фифо наверно можно, но это запутывает при анализе проблемы. Ведь тут нет такого, что сначала появляется запись T1 ID Глубина от Глубина до Описание 1 0 10 Песок потом T1 ID Глубина от Глубина до Описание 1 10 20 Глина потом T1 ID Глубина от Глубина до Описание 1 20 30 Глина с переслоением и только потом Т2 ID Глубина от Глубина до Описание 1 0 30 Примеси весь набор данных появляется одномоментно, и алгоритм обработки надо строить исходя из этого ... |
|||
:
Нравится:
Не нравится:
|
|||
02.04.2013, 15:34 |
|
Сложный запрос сравнения
|
|||
---|---|---|---|
#18+
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) Посмотрите логику моего примера выше по топику - она полностью находит все соответствия двух таблиц. И она является логикой ФИФО. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.04.2013, 15:42 |
|
|
start [/forum/topic.php?fid=45&msg=38208434&tid=1620164]: |
0ms |
get settings: |
11ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
38ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
56ms |
get tp. blocked users: |
1ms |
others: | 322ms |
total: | 463ms |
0 / 0 |