我希望使用以下查询来查找最后一个招标id。
FOR EACH tender-table NO-LOCK WHERE tender-table.kco = 1 BY tender-table.id:
DISPLAY tender-table.id.
END. 这个查询查看所有的投标id,并以升序返回所有id的结果。我得到的结果是
1,035 1.036 ......1,060,061,062,063,064,065,066
FOR LAST tender-table NO-LOCK WHERE tender-table.kco = 1 BY tender-table.id:
DISPLAY tender-table.id.
END.然而,当我使用这个查询来查找最后一个id时,我得到了结果,
1061
当我看到结果1066的时候。有没有人能告诉我为什么会发生这种情况?
发布于 2013-01-09 20:13:59
抱歉,我已经设法弄清楚1066个值没有tender-table.kco = 1。这就解决了问题。谢谢你抽出时间来。
发布于 2013-01-09 20:56:25
FOR LAST是一个非常具有欺骗性的陈述。(第一次也是如此。)它不会以直观的方式运行。排序顺序不是由by语句指定的。您将根据所使用的索引获得最后一条记录,并且不会进行排序。当BY引用一个未编制索引的字段(或者没有按照实际使用的索引顺序排序),或者WHERE子句没有明显地按照您希望的顺序映射到索引时,您将选择神秘的记录。
就我个人而言,我强烈建议你忘记使用FOR FIRST & LAST。一个更好的选项总是按预期排序,应该是:
FOR EACH tableName WHERE someCriteria BREAK BY sortOrder:
LEAVE.
END.
DISPLAY whatEver.(添加“降序”,从第一个翻到最后一个...)
以防万一有人需要说服力--试试"sports“数据库:
for first customer no-lock by discount:
display name discount.
end.https://stackoverflow.com/questions/14234893
复制相似问题