早上好!
我们有一张表格,显示客户,他们的仓库以及他们的记录上次更改的时间。我的任务是找到特定仓库的最新客户编号。其中大部分都没有改变,但也有不少。我创建了以下查询,完全可以找到我表中所有仓库的最后修改日期。
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
有人可以帮忙吗?这真让我抓狂!!!非常感谢任何帮助!
提前致谢
马特
答案 0 :(得分:2)
我不了解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
)
在任何一种情况下,您都需要决定如何适当地处理关系和代码。