早上!
我们有一个表格,显示客户,他们的仓库以及他们的记录上次更改的时间。 我的任务是查找特定仓库的最新客户编号。 其中大多数没有改变,但也有不少已经改变。 我创建了以下查询,该查询可以完美地查找表中所有仓库的最后修改日期。
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
)
无论哪种情况,您都需要决定如何为此适当地处理连接和代码。