【问题标题】:Find max based on 2 column and assign to another table's column根据 2 列查找最大值并分配给另一个表的列
【发布时间】:2019-08-06 20:08:32
【问题描述】:

我有 2 个包含以下信息的表格。

id 名称 日期 时间 1 琼 2019-08-06 13:45:00 2 克拉克 2019-08-03 21:20:00 3 月 2019-08-04 16:12:00

表 B

身份证日期时间 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 名称 日期 时间 1 琼 2019-08-06 13:45:00 2 克拉克 2019-08-04 23:00:00 3 月 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 )

【问题讨论】:

  • 提示 - 使用简单连接、最长时间和分组依据。

标签: sql db2


【解决方案1】:

你可以得到datetime在表bnot exists中组合的最大值,然后加入表a:

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;

我使用函数timestamp()来比较日期和时间。

【讨论】:

  • 我不确定这些是否适合我,因为我提到我只需要表 A 中的不同结果集,因为整个应用程序有一个基于单个表的模型类,并且它在很多地方都被使用。所以 Select A.* from (...) 可能是唯一的结果集。
  • 你试过了吗?从 A 中,您只需要 2 列,另外 2 列具有来自 B 的最大日期和时间。这就是这段代码的作用
  • 我试过了。我用 -104 抱怨我们给别名 b 的语句结尾是失败的
  • 我不知道DB2 有没有关于别名的奇怪规则。试试我编辑的代码。
  • 上面的代码是你测试的还是你改的?
【解决方案2】:

使用窗口函数!

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

【讨论】:

    猜你喜欢
    • 2021-05-17
    • 2021-07-25
    • 2012-05-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多