首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对于最后一个查询,给出了错误的结果

对于最后一个查询,给出了错误的结果
EN

Stack Overflow用户
提问于 2013-01-09 20:08:57
回答 2查看 4.5K关注 0票数 3

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

代码语言:javascript
复制
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

代码语言:javascript
复制
FOR LAST tender-table NO-LOCK WHERE tender-table.kco = 1 BY tender-table.id:
DISPLAY  tender-table.id.
END.

然而,当我使用这个查询来查找最后一个id时,我得到了结果,

1061

当我看到结果1066的时候。有没有人能告诉我为什么会发生这种情况?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-01-09 20:13:59

抱歉,我已经设法弄清楚1066个值没有tender-table.kco = 1。这就解决了问题。谢谢你抽出时间来。

票数 1
EN

Stack Overflow用户

发布于 2013-01-09 20:56:25

FOR LAST是一个非常具有欺骗性的陈述。(第一次也是如此。)它不会以直观的方式运行。排序顺序不是由by语句指定的。您将根据所使用的索引获得最后一条记录,并且不会进行排序。当BY引用一个未编制索引的字段(或者没有按照实际使用的索引顺序排序),或者WHERE子句没有明显地按照您希望的顺序映射到索引时,您将选择神秘的记录。

就我个人而言,我强烈建议你忘记使用FOR FIRST & LAST。一个更好的选项总是按预期排序,应该是:

代码语言:javascript
复制
FOR EACH tableName WHERE someCriteria BREAK BY sortOrder:
  LEAVE.
END.
DISPLAY whatEver.

(添加“降序”,从第一个翻到最后一个...)

以防万一有人需要说服力--试试"sports“数据库:

代码语言:javascript
复制
for first customer no-lock by discount:
  display name discount.
end.
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14234893

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档