根据2列查找最大值并分配给另一个表的列

时间:2019-08-06 20:08:32

标签: sql db2

我有2张桌子,上面有以下信息。

id  name     date         time
1   jon    2019-08-06   13:45:00
2   clark  2019-08-03   21:20:00
3   mary   2019-08-04   16:12:00

表B

id    date        time
1  2019-07-28   09:45:00
1  2019-07-31   12:45:00
1  2019-08-06   13:45:00
2  2019-08-02   21:20:00
2  2019-08-03   20:20:00
2  2019-08-04   21:20:00
2  2019-08-04   23:00:00
2  2019-08-04   01:20:00
3  2019-08-13   16:12:00
3  2019-08-13   19:12:00
3  2019-08-06   01:12:00
3  2019-08-06   08:12:00
3  2019-08-04   14:12:00

必需的结果集-不同的A。*(鉴于联接中还有其他表,因此我只需要不同A的结果集)

id  name     date         time
1   jon    2019-08-06   13:45:00
2   clark  2019-08-04   23:00:00
3   mary   2019-08-13   19:12:00

所以我需要表B中的最大日期和时间,并将其分配给表A中的日期和时间字段。

到目前为止已经尝试了多种方法-

SELECT A.*
FROM A
INNER JOIN X ON A.id = X.id
WHERE x.col = 'A'
    AND (
        A.DATE
        ,A.TIME
        ) IN

SELECT MAX(TIME) AS TIME
FROM B
WHERE EVT_DT IN (
        SELECT MAX(DATE)
        FROM B
        WHERE A.id = 1
        )

此方法有效,但不会在表A中设置日期和时间:

SELECT A.*
FROM A
INNER JOIN X ON A.id = X.id
WHERE x.col = 'A'
    AND CONCAT (
        A.DATE
        ,A.TIME
        ) =

SELECT MAX(DATE || TIME)
FROM B
WHERE A.id = 1 )

2 个答案:

答案 0 :(得分:0)

您可以在表date中将timeb的组合not existsselect a.id, a.name, bb.date, bb.time from a inner join ( select b.* from b where not exists ( select 1 from b as t where t.id = b.id and timestamp(t.date, t.time) > timestamp(b.date, b.time) ) ) as bb on bb.id = a.id; 的最大值,然后加入表a:

{{1}}

我使用功能timestamp()比较日期和时间。

答案 1 :(得分:0)

使用窗口功能!

select a.*, b.*
from a join
     (select b.*,
             row_number() over (partition by id order by date desc time desc) as seqnum
      from b
     ) b
     on a.id = b.id
where b.seqnum = 1