интервальные таблицы примерно таким образом :
Table_1
+----+-------+-----+-----------+
| ID | Begin | End | Condition |
+----+-------+-----+-----------+
| 1 | 1 | 8 | Normal |
| 2 | 8 | 23 | Critical |
| 3 | 23 | 30 | Normal |
+----+-------+-----+-----------+
Table_2
+----+-------+-----+------------+
| ID | Begin | End | Supervisor |
+----+-------+-----+------------+
| 1 | 1 | 14 | John |
| 2 | 14 | 30 | Janice |
+----+-------+-----+------------+
Result_table
+----+-------+-----+-----------+------------+
| ID | Begin | End | Condition | Supervisor |
+----+-------+-----+-----------+------------+
| 1 | 1 | 8 | Normal | John |
| 2 | 8 | 14 | Critical | John |
| 2 | 14 | 23 | Critical | Janice |
| 3 | 23 | 30 | Normal | Janice |
+----+-------+-----+-----------+------------+
Может кто-нибудь подсказать плиз как прописать соединение корректно в таком случае?
Примерно так Select ... From table1 t1 Join table2 t2 on ...
Будет проще пробовать если выложите таблицы на SQLize.online
1. Гугли про SCD2 и как джойнить исторические таблицы 2. Данные в примере выглядят так, как будто ключ (id) меняется со временем. Если это так, то таблицы в мусор, надо их перепроектировать. Ничего нормально тут не сджойнить 2. Если джойнить по id, то у тебя некорректный результат собран - история будет выглядеть совсем не так, если не протягивать значения из предыдущих периодов вместо null Например, для id = 2 должно быть три строки: 8-14, condition = critical, supervisor = null 14-23, condition = critical, supervisor = Janice 23-30, condition = null, supervisor = Janice 4. В таких таблицах обычно делают актуальный срез - версии с end равным условной бесконечности (null, 100500, 31.12.9999 и т.п)
Как бы ни cm join ить, нужно знать чётко сформированное логическое условие, причём, очень желательно, выраженное в виде терма из набора равенств полей, объединённых через логическое И.
Мысль (2) -то верная!
Выше тебе ответы
https://sqlize.online/sql/psql15/67ff0d491587e810c6934908dd6a7a19/
Обсуждают сегодня