从表中删除前N条记录的SQL是什么?

2020-09-26 00:13发布

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


我在讨论中看到了以下解决方案:

从MY_TABLE删除其中(,<...>)的地方(从的MY_TABLE顺序中选择顶部 ,<...>) ;

但是对于我来说,我无法比较这些字段,因为它可以删除在前N行之后的表中的其他重复记录。 我只想删除前N行。

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


我在讨论中看到了以下解决方案:

从MY_TABLE删除其中(,<...>)的地方(从的MY_TABLE顺序中选择顶部 ,<...>) ;

但是对于我来说,我无法比较这些字段,因为它可以删除在前N行之后的表中的其他重复记录。 我只想删除前N行。

付费偷看设置
发送
7条回答
宇峰
1楼-- · 2020-09-26 00:57

嗨,

您可以按以下方式修改查询。

从MY_TABLE删除,其中

中的(,<...>)

(从

选择顶部 ,<...>

(通过从MY_TABLE顺序中选择不同的*));

此致

Jyoti

SAP小菜
2楼-- · 2020-09-26 00:47

您使用的是没有主表的表还是该语句对您不起作用?

小灯塔
3楼-- · 2020-09-26 00:45

Sreeram,

我定期使用下面的SQL扫描一些SAP HANA系统表,例如M_BACKUP_CATALOG,以查找表中的顶部(最新)条目。 它也应该适用于DELETE:

从M_BACKUP_CATALOG中选择TOP 2 ENTRY_ID,SYS_START_TIME,SYS_END_TIME,STATE_NAME,其中entry_type_name如" complete%"按sys_start_time desc排序

修改查询以符合您要查找的条件,然后尝试一下。 在尝试任何操作之前,请记住先备份:)

Srinivas

槿木_熙
4楼-- · 2020-09-26 01:02

除了弗洛里安的问题:您想通过"删除前N条记录"解决什么情况?

Aaron 3364
5楼-- · 2020-09-26 00:49

您可以使用" $ rowid $"。 (不要使用大写字母,否则将无法使用)
没有人提及,但是sap_hana中的每个表都有一个隐藏列,即" $ rowid $"
您可以使用以下代码;

注意:请使用$ rowid $,后果自负。 它没有文档记录,不受支持,完全不建议使用。 ( Lars Breddemann 已经从技术上解释了为什么我们不应该使用它)/p>

从" TABLE_NAME"中删除,其中" $ rowid $" <1000 

$ rowid $列的值与分区ID相关。 对于没有分区的表,该值的范围是1到18014398509481984。在分区表上,分区1的值开始于18014398509481985;对于分区1,该值从1开始。 分区2开始于36028797018963969; 分区3开始于54043195528445953; 等等。 从$ rowid $中可以得到分区ID(如果需要该信息)。 Lars Breddemann 可以提供更多信息。

我再说一次; SAP并未正式支持$ rowid $列。 因此,谨慎使用此选项,后果自负。 另外,由于触发了一些内部流程,您将对包含隐藏列的查询造成性能损失。 通常,最好选择SAP HANA正式支持的功能。 老实说,改变sap hana景观中的$ rowid $行为可能比关闭整个公司更难。 即使在任何HANA源代码中加了一个逗号,也可能需要董事会会议,500-600次内部讨论,对汁液技术架构师的看法以及内部的一些民主投票。 无论如何,这些都不会让我们鼓舞我们。 最好选择内部已经存在的标准方法。

Cikesha
6楼-- · 2020-09-26 01:07

你好Srinivas,

不幸的是,这并不容易。 在HANA中没有" DELETE TOP 2 FROM ...."。

Joyti提到的选项最近已经提出,并且似乎是有效的。

BR,Bojan

一周热门 更多>