首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对客户记录的最大日期进行分组(多个表)

对客户记录的最大日期进行分组(多个表)
EN

Stack Overflow用户
提问于 2016-01-19 16:12:15
回答 1查看 96关注 0票数 1

早上好!

我们有一张桌子显示客户,他们的仓库,以及他们的记录最后一次被改变。我的任务是为一个特定的仓库找到最近的客户号码。其中大部分没有改变,但有相当多的变化。我已经创建了下面的查询,它可以很好地找到表中所有仓库的最后修改日期。

代码语言:javascript
复制
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

我遇到的问题是,我现在需要添加客户编号并加入到我的customer表中,以检索客户名称。仅仅添加CUSNO字段就会导致一个错误,所以我必须将CUSNO添加到“group by”中。这给了我对每个仓库的多条记录。我的数据如下:

代码语言:javascript
复制
    WHS   AMENDT
    A01   1150101
    A01   1130704
    A02   1141030
    A07   1071101
    A10   1020905

..so查询正确返回:

代码语言:javascript
复制
    WHS   AMENDT
    A01   1150101
    A02   1141030
    A07   1071101
    A10   1020905

我需要添加CUSNO列,因为客户号更改了。我的查询看起来如下:

代码语言:javascript
复制
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

...and返回:

代码语言:javascript
复制
    WHS   CUSNO   AMENDT
    A01   1003    1150101
    A01   1056    1130704
    A02   1011    1141030
    A07   1169    1071101
    A10   1012    1020905

...when我需要:

代码语言:javascript
复制
    WHS   CUSNO   AMENDT
    A01   1003    1150101
    A02   1011    1141030
    A07   1169    1071101
    A10   1012    1020905

有人能帮忙吗?我快疯了!任何帮助都是非常感谢的!

提前感谢

哑光

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-01-19 16:27:19

我不知道db2400的所有功能,因此如果它支持窗口函数,那么可能有更容易/更好的方法来处理这个问题。也就是说,这是我能想到的最“通用”的SQL,所以它最有可能起作用。

代码语言:javascript
复制
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和相关子查询:

代码语言:javascript
复制
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
    )

在这两种情况下,您还需要决定如何适当地处理领带和代码。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34881619

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档