我有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 )
答案 0 :(得分:0)
您可以在表date
中将time
与b
的组合not exists
和select
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