Объединяя ту же информацию. данные столбцов из нескольких таблиц в один столбец представления - PullRequest
1 голос
/ 01 февраля 2012

У меня есть 2 таблицы.

TABLE_1 ( id, date, column_1 )
TABLE_2 ( id, date, column_1, column_2 )

идентификатор и дата являются общими для обеих таблиц.Я хочу сделать представление, комбинирующее эти два.

VIEW_LATEST ( index, table_name, id, date)

В представлении мне нужен индекс, чтобы идентифицировать конкретную строку отдельно (не обязательно).Там у меня будет имя таблицы, чтобы идентифицировать тот факт, откуда были взяты данные конкретной строки (id, date).И мне нужно получить информацию только за определенный период (например, за последнюю неделю).

Например.

TABLE_1 ([ 1, 2012-01-27 ], [2, 2012-02-01 ])
TABLE_2 ([ 1, 2012-01-20 ], [ 2, 2012-01-31 ])
VIEW_LATEST ([ tbl_1, 2, 2012-02-01 ], [ tbl_2, 2, 2012-01-31 ], [ tbl_1, 1, 2012-01-27])

На прошлой неделе - с 2012-01-26 по 2012-02-01, поэтому первая запись TABLE_2 не отображается в представлении.Упорядочено по дате.

Мне нужно сделать именно так, как указано выше.Я искал решение, подобное этому, и не нашел.

Любое решение для достижения вышеуказанного сценария высоко ценится.Кроме того, вы должны создать отдельную таблицу формата VIEW_LATEST для вставки данных при вставке данных в TABLE_1, TABLE_2, чтобы получать последние данные, когда это необходимо.Таким образом, это будет одним из решений, если невозможно реализовать вышеуказанный сценарий.

Ответы [ 2 ]

2 голосов
/ 01 февраля 2012

Вы можете объединить столы вместе.

Для MySQL (подзапрос не разрешен):

(SELECT 'Table_1' as tablename, id, date FROM Table_1
WHERE date BETWEEN TO_DATE('20120126', 'YYYYMMDD') AND TO_DATE('20120201', 'YYYYMMDD'))
UNION 
(SELECT 'Table_2' as tablename, id, date FROM Table_2
WHERE date BETWEEN TO_DATE('20120126', 'YYYYMMDD') AND TO_DATE('20120201', 'YYYYMMDD'))
ORDER BY tablename, id, date

Результат будет:

tablename    id    date
---------    --    -----------
Table_1       1    2012-01-27
Table_2       2    2012-01-31
Table_1       2    2012-02-01
1 голос
/ 01 февраля 2012
SELECT src_table, id, the_date
  FROM (SELECT 'TABLE_1' AS src_table, id, the_date
          FROM table_1
          WHERE the_date BETWEEN TO_DATE('2012-01-26', 'YYYY-MM-DD')
                             AND TO_DATE('2012-02-01', 'YYYY-MM-DD')
         UNION
         SELECT 'TABLE_2' AS src_table, id, the_date
           FROM table_2
           WHERE the_date BETWEEN TO_DATE('2012-01-26', 'YYYY-MM-DD')
                              AND TO_DATE('2012-02-01', 'YYYY-MM-DD')
        )
  ORDER BY the_date DESC, id, src_table

Замените ваши даты на SYSDATE-7 или что-то более подходящее

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...