Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Web программирование > SQL, базы данных
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.11.2017, 16:27   #1
JUDAS
фонатик DELPHI
Форумчанин
 
Аватар для JUDAS
 
Регистрация: 14.01.2008
Сообщений: 714
По умолчанию Объединение данных с двух таблиц

Приветствую гуру SQL !
Когда то год назад в интернете я точно видел такой запрос, но сегодня не могу его найти. Вроди запрос даже вёл на наш форум...
Вообщем суть
У меня есть 2 таблицы, вот такие


Запрос
Цитата:
SELECT * FROM table1 A LEFT OUTER JOIN table2 B ON B.id=A.id AND B.label=A.label WHERE A.label=1
даёт вот такой результат


а нужен вот такой


как "доточить" пустые данные крайней заполненной выборкой ?
95% сбоев и ошибок приложений, находится в полу метрах от монитора

Последний раз редактировалось JUDAS; 06.11.2017 в 10:41.
JUDAS вне форума Ответить с цитированием
Старый 05.11.2017, 16:55   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

Сам же недавно и спрашивал ))
http://www.programmersforum.ru/showthread.php?t=310682
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 05.11.2017, 18:18   #3
JUDAS
фонатик DELPHI
Форумчанин
 
Аватар для JUDAS
 
Регистрация: 14.01.2008
Сообщений: 714
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
Сам же недавно и спрашивал ))
неее, то совсем другая задача. там одна таблица и несколько подчинённых и нужно было подставить то или иное значение в завовимсоти от наличия записи в подчинённой таблице... то есть типо

Есть таблица "транспортные средства" и есть таблицы "грузовые" (со своими типами) "легковые" (со своими) "мотоциклы" )со своими) и.т.п.
Нужно выбрать все транспортные средства с указанием объединёного типа

А тут всё по другому
Есть непрерывные посылки которые принимаюся ежесекундно , парсятся и записываются в базу данных. Каждый набор "посылок" принимается в определённом диапозоне времени (например с 10.00 до 10.45). Во время приёма этих посылок, проскакивают посылки другого типа (асинхронно), которые меняют какой то параметр основного потока.. таких посылок может прийти несколько десятков штук, может сотня, а может только одна!
Так вот. Нужно выборку общего потока данных с JOIN-ом этих посылок причём чтобы в каждую секунду(каждый принятый пакет) был сопоставлен с самим крайним изменением в потоке
95% сбоев и ошибок приложений, находится в полу метрах от монитора
JUDAS вне форума Ответить с цитированием
Старый 05.11.2017, 19:31   #4
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

Не понял зачем Table0. А так, если правильно понял, определить вот такой максимум
Код:
SELECT A.id,A.label,A.param1,A.param2,B.id id2,B.label label2,B.param1 param12,B.param2 param22,
      (SELECT MAX(T.id) FROM Table2 T WHERE T.id<A.id AND T.label=1) id0  
  FROM table1 A 
    LEFT JOIN table2 B ON B.id=A.id AND B.label=A.label
  WHERE A.label=1
и используя как вложенній запрос получить
Код:
SELECT U.id,U.label,U.param1,U.param2,
    CASE WHEN U.id2 IS NULL THEN V.id ELSE U.id2 END AS id2,
    CASE WHEN U.id2 IS NULL THEN V.label ELSE U.label2 END AS label2,
    CASE WHEN U.id2 IS NULL THEN V.param1 ELSE U.param12 END AS param12,
    CASE WHEN U.id2 IS NULL THEN V.param2 ELSE U.param22 END AS param22
  FROM (
    SELECT A.id,A.label,A.param1,A.param2,B.id id2,B.label label2,B.param1 param12,B.param2 param22,
          (SELECT MAX(T.id) FROM Table2 T WHERE T.id<A.id AND T.label=1) id0  
      FROM table1 A 
        LEFT JOIN table2 B ON B.id=A.id AND B.label=A.label
      WHERE A.label=1) U
    LEFT JOIN table2 V ON V.id=U.id0
Можно isnull вместо кейсов, или coalesce, кажись есть в Postgres
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 05.11.2017 в 19:42.
Аватар вне форума Ответить с цитированием
Старый 05.11.2017, 22:06   #5
JUDAS
фонатик DELPHI
Форумчанин
 
Аватар для JUDAS
 
Регистрация: 14.01.2008
Сообщений: 714
По умолчанию

Огромное тебе спасибо Аватар.
Ты в очередной раз помог мне =)

Очень жаль что движок не даёт тебе плюсануть ответ

Цитата:
Не понял зачем Table0.
Table0 - таблица с параметрами рейсов
Table1 - таблица с изменяющейся метрикой рейса (каждые 4 секунды 1 запись с новыми координатами и скоростью)
Table2 - таблица параметров которые меняются с меньшей частотой , например смена высоты, переход в разные районы и.т.п

Структура которая показана выше, позволяет сильно! уменьшить размеры БД изза того, что пустые поля Table2 не дублируются в Table1 миллионы раз
Но чтобы такая структура ожила, нужен был тот самый скрип который ты написал. Используя его создаётся некая ВЬЮШКА в которой
можно будет выбирать и проигрывать историю за период

кстати, id - на самом деле moment (время в формате целого числа UNIX) а label - airtcraft_id идентификатор главной записи в Table0 которая содержит много полей
начиная от аэродромов вылета/посадки заканчивая типом самолёта, его регистрационными кодами разными а так же туда дублируется крайняя метрика
чтобы можно было проигрывать в режиме realtime не залезая в Table1 и Table2 которые на два-три порядка больше по размеру чем Table0
95% сбоев и ошибок приложений, находится в полу метрах от монитора

Последний раз редактировалось JUDAS; 06.11.2017 в 10:48.
JUDAS вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Объединение данных из двух таблиц Polly_Panika Microsoft Office Excel 0 07.04.2014 08:01
ОБЪЕДИНЕНИЕ ДВУХ ТАБЛИЦ BarakudaX777 БД в Delphi 11 05.03.2013 09:17
Объединение двух таблиц go2net Microsoft Office Excel 4 12.08.2010 00:11
Получение данных из двух таблиц SQL Server а S_Yevgeniy БД в Delphi 8 27.12.2009 15:12
Объединение двух таблиц jekis2506 Microsoft Office Excel 5 15.04.2009 08:34