早上好!
我们有一张桌子显示客户,他们的仓库,以及他们的记录最后一次被改变。我的任务是为一个特定的仓库找到最近的客户号码。其中大部分没有改变,但有相当多的变化。我已经创建了下面的查询,它可以很好地找到表中所有仓库的最后修改日期。
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”中。这给了我对每个仓库的多条记录。我的数据如下:
WHS AMENDT
A01 1150101
A01 1130704
A02 1141030
A07 1071101
A10 1020905..so查询正确返回:
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...and返回:
WHS CUSNO AMENDT
A01 1003 1150101
A01 1056 1130704
A02 1011 1141030
A07 1169 1071101
A10 1012 1020905...when我需要:
WHS CUSNO AMENDT
A01 1003 1150101
A02 1011 1141030
A07 1169 1071101
A10 1012 1020905有人能帮忙吗?我快疯了!任何帮助都是非常感谢的!
提前感谢
哑光
发布于 2016-01-19 16:27:19
我不知道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
)在这两种情况下,您还需要决定如何适当地处理领带和代码。
https://stackoverflow.com/questions/34881619
复制相似问题