从多个表中选择超出范围的日期,列名称和时间戳

时间:2018-03-30 20:00:43

标签: sql oracle multiple-columns

我有多个表(10+),其中我试图提取指定日期范围之外的任何日期,列名称(保存超出范围的日期),以及该日期的MODIFIED_BY'排。下面是两个示例表和所需的输出。 我在表A中检查的日期范围是大于1990年的生日。在表B中,生效日期大于2017

TABLE_A

dd

表-B

library(ggplot2)
ggplot(dd, aes(x = Dep, y = IND1, fill = (IND1 > 0))) +
    geom_col() +
    scale_fill_manual(value = c("purple", "blue")) +
    coord_flip()

输出

|---------------------|------------------|------------------|
|      ACCT_ID        |    BIRTHDATE     |    MODIFIED_BY   |
|---------------------|------------------|------------------|
|          12         |     04-MAR-96    |     user1234     |
|---------------------|------------------|------------------|
|          13         |     10-MAY-79    |     user9999     |
|---------------------|------------------|------------------|

我不是在这个例子中寻找SQL代码,而是一个解决方案。我可以使用UNION完成此操作,但由于并非所有联接都在acct_id上,因此在为许多表执行此操作时可能会很乏味且很慢。我能够使用两个列完成此操作,一个是帐户ID,另一个是BAD_DATE,其中我将列名称和modified_by附加到案例返回。

感谢任何帮助。

谢谢!

2 个答案:

答案 0 :(得分:0)

如果没有UNIONing那些表,我不知道怎么做;可能是一项繁琐的工作,但是嘿 - 你只会做一次。这是一个例子:

SQL> create table table_a (acct_id number, birthdate date, modified_by varchar2(20));

Table created.

SQL> create table table_b (some_id number, effective_dt date, username varchar2(20));

Table created.

SQL> insert all
  2    into table_a values (12, date '1996-03-04', 'user1234')
  3    into table_a values (13, date '1979-05-10', 'user9999')
  4    into table_b values (12, date '2015-01-01', 'user9876')
  5    into table_b values (12, date '2017-04-01', 'user1111')
  6  select * From dual;

4 rows created.

SQL> create or replace view wc as
  2  select 'table_a' source, acct_id id, birthdate bad_date, modified_by from table_a union all
  3  select 'table_b' source, some_id, effective_dt, username from table_b;

View created.

SQL>
SQL> select *
  2  from wc
  3  where (source = 'table_a' and bad_date > date '1990-01-01')
  4     or (source = 'table_b' and bad_date > date '2017-01-01');

SOURCE          ID BAD_DATE   MODIFIED_BY
------- ---------- ---------- --------------------
table_a         12 04.03.1996 user1234
table_b         12 01.04.2017 user1111

SQL>

答案 1 :(得分:0)

找到解决方案!

我正在使用案例陈述来确定糟糕的日期。如果我添加两个具有相同条件的附加case语句,而是一个返回一个列名字符串而另一个返回modified_by ID,那么它可以工作!