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



早上!

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

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

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

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

..因此,查询正确返回:

    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

。并返回:

    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 的所有功能,因此例如,如果它支持窗口函数,则可能有更简单/更好的方法来处理这个问题。也就是说,这是我能想到的最"通用"的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
    )

无论哪种情况,您都需要决定如何为此适当地处理连接和代码。

相关内容

  • 没有找到相关文章

最新更新