我希望使用以下查询来查找最后的投标id。
FOR EACH tender-table NO-LOCK WHERE tender-table.kco = 1 BY tender-table.id:
DISPLAY tender-table.id.
END.
该查询查看所有投标id,并以升序返回所有id的所有结果。我得到的结果是
10351.036……1060年1061年1062年1063年1064年1065年1066
FOR LAST tender-table NO-LOCK WHERE tender-table.kco = 1 BY tender-table.id:
DISPLAY tender-table.id.
END.
然而,当我使用这个查询来查找最后一个id时,我得到了结果,
1061年当我应该看到结果1066。有人能告诉我为什么会这样吗?
FOR LAST是一个非常具有欺骗性的语句。(FOR FIRST也是如此。)它不以直观的方式运行。排序顺序不是由by语句指定的。您将根据所使用的索引获得LAST记录,并且不会进行排序。当BY引用了一个没有索引的字段(或者一个没有按照实际使用的索引顺序排序的字段),或者当WHERE子句没有明显地按照您希望的顺序映射到索引时,您将会选择神秘的记录。
就我个人而言,我强烈建议你忘记使用FOR FIRST &最后。一个更好的选择是:
,它总是按预期排序FOR EACH tableName WHERE someCriteria BREAK BY sortOrder:
LEAVE.
END.
DISPLAY whatEver.
(添加" ascending "从FIRST到LAST…)
万一有人需要说服——试试这个"sports"数据库:
for first customer no-lock by discount:
display name discount.
end.
对不起,我已经设法弄清楚,这1066个值没有投标表。Kco = 1。这就解决了问题。谢谢你的宝贵时间。