美好的一天! 伙计们,我想比较多个值时遇到问题。 例如,我今天有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的作业相关。
答案 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>