Oracle,比较问题

时间:2018-04-23 04:31:30

标签: oracle function view conditional-statements procedure

美好的一天! 伙计们,我想比较多个值时遇到问题。 例如,我今天有4月23日的日志数据。这与昨天的工作(4月22日)有关,具体名称。

在我的比较中,我应该选择具有此特定名称的所有日志及其作业日期。我说日志'使用此特定名称,日期必须大于我们的工作。此特定名称之前已完成其他工作。 我怎样才能选择最后一个最近的那个?

你能告诉我吗? 例如:

Table: Job
id
name
job start date
Table: Log
id
type
Log date

我们有3个不同的职位,名称为" Coding" 和3种不同的日志。

乔布斯:

1, coding, 21-Apr-10  
2, coding, 21-Apr-14  
3, coding, 21-Apr-18

日志:

 1. 1, error, 23-Apr-10 
 2. 2, error, 23-Apr-15  
 3. 3, error, 20-Apr-18  
 4. 4, error, 23-Apr-18

在那里,当我想执行日志和工作时,我必须查看他们的日期。例如,id为1的错误与id为1的作业有关,因为log的日期大于作业的日期。

或者,id为3的日志应与id为2的作业相关。

1 个答案:

答案 0 :(得分:0)

一般来说,这样的事情可能会起作用:

select *
from some_table t
where t.date_column = (select max(t1.date_column)
                       from some_table t1
                       where t1.id = t.id
                      )

如果没有,请提供测试用例(CREATE TABLE和INSERT INTO样本数据,这将是输入),并且 - 基于此,告诉我们您的期望输出

<强> [编辑]

这有点奇怪的数据模型;作业和日志除了日期之外没有任何关联...无论如何,这里的代码返回你描述的内容(至少,我是如何理解的)。

SQL> with tjob (id, name, job_start) as
  2    (select 1, 'coding', to_date('21.04.2010', 'dd.mm.yyyy') from dual union
  3     select 2, 'coding', to_date('21.04.2014', 'dd.mm.yyyy') from dual union
  4     select 3, 'coding', to_date('21.04.2018', 'dd.mm.yyyy') from dual
  5    ),
  6  logs (id, type, log_date) as
  7    (select 1, 'error', to_date('23.04.2010', 'dd.mm.yyyy') from dual union
  8     select 2, 'error', to_date('23.04.2015', 'dd.mm.yyyy') from dual union
  9     select 3, 'error', to_date('20.04.2018', 'dd.mm.yyyy') from dual union
 10     select 4, 'error', to_date('23.04.2018', 'dd.mm.yyyy') from dual
 11    )
 12  select j.id job_id
 13  from tjob j
 14  where j.job_start = (select max(j1.job_start)
 15                       from tjob j1
 16                       where j1.job_start < (select l.log_date
 17                                             from logs l
 18                                             where l.id = &log_id));
Enter value for log_id: 1

    JOB_ID
----------
         1

SQL> /
Enter value for log_id: 3

    JOB_ID
----------
         2

SQL>