gpt4 book ai didi

progress-4gl - FOR LAST - 查询,给出错误的结果

转载 作者:行者123 更新时间:2023-12-04 04:59:27 32 4
gpt4 key购买 nike

我希望使用以下查询来查找最后一个投标 ID。

FOR EACH tender-table NO-LOCK WHERE tender-table.kco = 1 BY tender-table.id:
DISPLAY tender-table.id.
END.

此查询查看所有投标 ID,并按升序返回所有 ID 的所有结果。我得到的结果是

1,0351.036……1,0601,0611,0621,0631,0641,0651,066

FOR LAST tender-table NO-LOCK WHERE tender-table.kco = 1 BY tender-table.id:
DISPLAY tender-table.id.
END.

但是,当我使用此查询查找最后一个 ID 时,我得到了结果,

1,061

当我应该看到结果 1,066 时。谁能建议为什么会这样?

最佳答案

FOR LAST 是一个非常具有欺骗性的声明。 (首先也是如此。)它的行为并不直观。排序顺序不是由 BY 语句指定的。您将根据使用的索引获得最后一条记录,并且不会进行排序。当 BY 引用未索引的字段(或未按实际使用的索引顺序排序的字段)或 WHERE 子句显然未按照您希望的顺序映射到索引时,您将选择神秘的记录.

就个人而言,我强烈建议您忘记使用 FOR FIRST & FOR LAST。始终按预期排序的更好选择是:

FOR EACH tableName WHERE someCriteria BREAK BY sortOrder:
LEAVE.
END.
DISPLAY whatEver.

(添加“DESCENDING”以从 FIRST 翻转到 LAST ...)

以防万一有人需要说服——用“体育”数据库试试这个:

for first customer no-lock by discount:
display name discount.
end.

关于progress-4gl - FOR LAST - 查询,给出错误的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14234893/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com