按客户记录的最大日期分组(多个表)

Grouping on Max date for a Customer Record (multiple tables)

大家早上好!

我们有一个 table 显示客户、他们的仓库以及他们的记录上次更改的时间。我的任务是查找特定仓库的最新客户编号。其中大部分没有改变,但也有不少改变了。我创建了以下查询,它可以完美地找到我 table 中所有仓库的最后修改日期。

Select
  WHS,
  Max(AMENDT) As MAX_AMENDT
From
  MBC6REVQ
Group By
  WHS
Order By
  WHS,
  Max(Distinct (Select
    Max(MAX_AMENDT)
  From
    MBC6REVQ
  Group By
    MBC6REVQ.WHS
  Fetch First
    1 Rows Only)) Desc

我遇到的问题是我现在需要添加客户编号并加入我的客户 table 以检索客户名称。仅添加 CUSNO 字段会导致错误,因此我必须将 CUSNO 添加到 'group by'。这为我提供了每个仓库的多个记录。我的数据如下所示:

    WHS   AMENDT
    A01   1150101
    A01   1130704
    A02   1141030
    A07   1071101
    A10   1020905

..所以查询正确 returns:

    WHS   AMENDT
    A01   1150101
    A02   1141030
    A07   1071101
    A10   1020905

我需要添加 CUSNO 列,因为客户编号已更改。我的查询看起来像:

Select
  WHS,
  CUSNO,
  Max(AMENDT) As MAX_AMENDT
From
  MBC6REVQ
Group By
  WHS, CUSNO
Order By
  WHS,
  Max(Distinct (Select
    Max(AMENDT)
  From
    MBC6REVQ
  Group By
    MBC6REVQ.WHS
  Fetch First
    1 Rows Only)) Desc

...和returns:

    WHS   CUSNO   AMENDT
    A01   1003    1150101
    A01   1056    1130704
    A02   1011    1141030
    A07   1169    1071101
    A10   1012    1020905

...当我需要时:

    WHS   CUSNO   AMENDT
    A01   1003    1150101
    A02   1011    1141030
    A07   1169    1071101
    A10   1012    1020905

有人可以帮忙吗?这真让我抓狂!!!非常感谢任何帮助!

提前致谢

马特

我不知道 db2400 的所有功能,所以如果它支持窗口函数,可能有 easier/better 方法来处理这个问题。也就是说,这是我能想到的最多"generic"SQL,所以最有可能成功。

SELECT
    T1.WHS,
    T1.CUSNO,
    T1.AMENDT
FROM
    MBC6REVQ T1
LEFT OUTER JOIN MBC6REVQ T2 ON
    T2.WHS = T1.WHS AND
    T2.AMENDT > T1.AMENDT
WHERE
    T2.WHS IS NULL

或者,如果 db2400 支持 NOT EXISTS 和相关子查询:

SELECT
    T1.WHS,
    T1.CUSNO,
    T1.AMENDT
FROM
    MBC6REVQ T1
WHERE
    NOT EXISTS
    (
        SELECT *
        FROM
            MBC6REVQ T2
        WHERE
            T2.WHS = T1.WHS AND
            T2.AMENDT > T1.AMENDT
    )

在任何一种情况下,您还需要决定如何处理关系并为此适当地编写代码。