Java 筛选出旧行的重复实体

Java 筛选出旧行的重复实体,java,sql,hana,Java,Sql,Hana,有两张桌子 参考项目信息和库存金额的OITM 引用所有项目库存金额的所有更改的OINM。 目前,我已经构建了一个SQL,它允许我通过连接表来选择项目库存的新更改,但我遇到了这样一个问题:当OINM对同一项目进行了两次更改时,有时会出现重复条目 这是我目前拥有的SQL,如下所示: SELECT T0.\"ItemCode\", T0.\"WhsCode\", T0.\"OnHand\", T0.\"IsCommited\", T0.\"OnOrder\", T1.\"DocDate\", T1.\

有两张桌子

参考项目信息和库存金额的OITM 引用所有项目库存金额的所有更改的OINM。 目前,我已经构建了一个SQL,它允许我通过连接表来选择项目库存的新更改,但我遇到了这样一个问题:当OINM对同一项目进行了两次更改时,有时会出现重复条目

这是我目前拥有的SQL,如下所示:

SELECT T0.\"ItemCode\", T0.\"WhsCode\", T0.\"OnHand\", T0.\"IsCommited\", T0.\"OnOrder\", T1.\"DocDate\", T1.\"DocTime\" 
FROM KA_DEV6.OITW T0,KA_DEV6.OINM T1 
WHERE T0.\"WhsCode\" = '01' AND T0.\"ItemCode\" = T1.\"ItemCode\" 
AND (T1.\"DocDate\" > '2019-10-20' OR (T1.\"DocDate\" = '2019-10-20' AND T1.\"DocTime\" >= '1025'))
这将输出以下结果:

|ItemCode:CC01.NB.C.LF.F.LI.V.0813.GRCE|WhsCode:01|OnHand:8.000000|IsCommited:4.000000|OnOrder:0.000000|DocDate:2019-10-22 00:00:00.000000000|DocTime:1024
|ItemCode:JO.C.LF.U.LI.V.0004. 22.NG|WhsCode:01|OnHand:1.000000|IsCommited:0.000000|OnOrder:0.000000|DocDate:2019-10-21 00:00:00.000000000|DocTime:1223
|ItemCode:JO.I.FT.M.AB.C.0106.  L.NG|WhsCode:01|OnHand:32.000000|IsCommited:0.000000|OnOrder:0.000000|DocDate:2019-10-21 00:00:00.000000000|DocTime:1401
|ItemCode:JO.I.FT.M.AB.C.0106.  L.NG|WhsCode:01|OnHand:38.000000|IsCommited:0.000000|OnOrder:0.000000|DocDate:2019-10-21 00:00:00.000000000|DocTime:1402
问题是有些条目具有相同的ItemCode,我只需要最新的更改。因此,我需要过滤掉第三个结果,只返回最近的第四个结果

我该怎么做呢?因为我的排序是按DocDate和DocTime两个字段进行的,然后过滤掉重复项

订购已经是我可以做的事情了,而且它正在增加

ORDER BY T1.\"DocDate\", T1.\"DocTime\" ASC
但是我如何过滤掉重复的内容呢

预期产出将是:

|ItemCode:CC01.NB.C.LF.F.LI.V.0813.GRCE|WhsCode:01|OnHand:8.000000|IsCommited:4.000000|OnOrder:0.000000|DocDate:2019-10-22 00:00:00.000000000|DocTime:1024
|ItemCode:JO.C.LF.U.LI.V.0004. 22.NG|WhsCode:01|OnHand:1.000000|IsCommited:0.000000|OnOrder:0.000000|DocDate:2019-10-21 00:00:00.000000000|DocTime:1223
|ItemCode:JO.I.FT.M.AB.C.0106.  L.NG|WhsCode:01|OnHand:38.000000|IsCommited:0.000000|OnOrder:0.000000|DocDate:2019-10-21 00:00:00.000000000|DocTime:1402
问候


编辑:对于将来阅读并查看答案的任何人,请注意,对于我的情况,信息的实际顺序并不重要,因为我不关心它是否是最新的更改,只是过滤掉重复的内容。对于实际的最新表,您需要将Order By子句从子查询更改为Order By T1.\DocDate\,T1.\DocTime\DESC,并且可以选择在整个查询结束时再次对结果进行排序。

您可以使用行号窗口功能如下所示:

选择* 从…起 选择T0.\ItemCode\,T0.\WhsCode\,T0.\OnHand\,T0.\iscommitted\,T0.\OnOrder\,T1.\DocDate\,T1.\DocTime\, T0分区上的行号。\ItemCode\ORDER BY T1。\DocTime\DESC AS RN 来自KA_DEV6.OITW T0 在T0上加入KA_DEV6.OINM T1。\WhsCode\=“01”和T0。\ItemCode\=T1。\ItemCode\ 其中T1.\DocDate\>'2019-10-20'或T1.\DocDate\='2019-10-20'和T1.\DocTime\>='1025' X 其中RN=1
注意-我还使用了标准连接语法,而不是您使用的20多年前的语法。

向我们展示db模式、示例数据、当前和预期输出。请阅读,这里是学习如何提高问题质量和获得更好答案的好地方。尝试在添加的预期输出中创建示例。DB模式是不相关的,每个表有200多个字段,因为我只需要处理这个问题中提到的ItemCode、DocTime、DocDate三个字段。我提供了一个示例,该示例应作为示例数据和当前输出使用。您必须提供示例数据和预期输出。就像你给我看一块蛋糕,让我复制,但不要告诉我你用的是什么配料。您可以提供问题的简化模式。但是模式帮助查看您使用的是什么索引什么是pk,什么是fk。