SQL CE:限制查询中返回的行

Posted

技术标签:

【中文标题】SQL CE:限制查询中返回的行【英文标题】:SQL CE: Limiting rows returned in the query 【发布时间】:2009-12-17 20:00:30 【问题描述】:

SQL Compact Edition 3.5 中,请注意我说的是 Compact Edition - 有没有办法将行数限制为 2?使用 LIMIT 或 TOP 之类的东西。我真的不想将任何东西与 SqlCEDataReader 或 SqlCEResultSet 一起使用。我想在查询中完成所有限制。现在这可能吗?我环顾四周,似乎并非如此。

编辑-

为了响应 Dave Swersky 的数据请求并在某些列上使用 Min()/Max() 作为获取前 2 行的一种手段,这里是一些示例(已消毒)数据:

Line     Site          Function     Status
1010     Las Vegas     new          4
1020     DC            send         1
1030     Portland      copy         1
1040     SF            copy         1
1050     Portland      copy         1
1060     DC            send         1

*还有比这更多的列,但这些是重要的。

抱歉缺少直观的数据(但实际数据更不直观!),但为了安全起见,我需要更改数据。

所以-我需要确定:记录在前一行中的哪个站点以确定需要提取它的位置。

任何给定行上的站点除了第一行带有function = 'new'对应于项目所在的位置接下来是。因此,简单地从同一行中抓取该站点不会告诉我它来自哪里。状态将始终为 1 或 4。4 对应于已经交付的位置,因此我不想将这些记录包含在结果中。但它可能对获取取货地点有用。

对于这个数据表,我希望查询返回与状态为 1 的第一行正上方的行相对应的站点。因此,这将是拉斯维加斯。

【问题讨论】:

你为什么不愿意使用结果集而只取前 2 行? @ctacke - 原因有点复杂,但简而言之,这只是一个项目的行程,还有比这更多的项目以及所有与项目需要的位置相匹配的站点使用此查询读入当前拾取的。我正在尝试找到一种方法来限制其发现的网站数量,这些网站是需要提取的有效网站。 【参考方案1】:

Sql CE 3.5 支持 TOP 表达式: http://technet.microsoft.com/en-us/library/bb686896.aspx

【讨论】:

@raymond-holmboe - 哇,我感到很惊讶!我也觉得自己像个白痴——哈哈。我发誓我在互联网上看了几个小时,甚至有很多地方特别说该功能不存在,最好的方法是其他一些诡计!我想知道这是什么时候引入的?好吧,非常感谢 - 真的帮助了我。干杯。 嗨,是的,这是 3.5 中引入的最好的功能之一 :) 我很高兴我发布了它,几乎没有因为它已经从这里的一些大权威那里得到了一些答案。 【参考方案2】:

这将取决于您的数据...如果您有保证顺序的 ID 或日期,您可以使用带有 NOT IN 子查询的 MAX 来返回有限数量的行。发布您的一些架构,我将尝试编写一个示例。

【讨论】:

@Dave Swersky - 这就是我倾向于的地方 - 我很快就会发布一些表格数据【参考方案3】:

根据您的需要,您可能能够使用 DataReader 执行完整的查询,并且只调用它的 .Read() 方法两次。

【讨论】:

【参考方案4】:

我从未在查询本身中找到答案。 这是针对移动应用程序还是桌面上的 SQL CE?

我真的没有直接的答案给你,但会分享我在自己的项目中观察到的... 我在桌面应用程序中使用 SQL CE 的经验是,在某些情况下使用应用程序代码进行过滤会更高效。因此,如果您发现自己编写了一个复杂的查询,您可能还想查看在 data reader.Read() 循环内的应用程序代码中编写过滤器并比较结果。我发现这种剪切操作需要几秒钟到亚秒级的情况。

我知道这不是你想要做的,但我发现 SQL CE 要求你优化的东西与你在服务器上运行时有所不同。无需担心网络延迟,因此不会出现正常的担忧。

【讨论】:

@Jim Leonardo - 这是一个移动应用程序 - 我将更多地研究如何更改我的代码以使用数据阅读器之类的东西。至少在最初,这听起来像是从我目前所处的位置倒退了一步。但感谢您的建议。 @Jim Leonardo - 是的,在这种非常特殊的情况下,限制结果数量的所有适配器选项都不是一个真正的选项。主要的是,限制行是我想在子查询中做的事情,而外部查询仍然需要能够处理动态范围的结果。但无论如何,再次感谢

以上是关于SQL CE:限制查询中返回的行的主要内容,如果未能解决你的问题,请参考以下文章

限制 SQL 查询中每个 id 的行数 [重复]

SQL Fundamentals:Restricting and Sorting Data限制和排序数据

如何限制查询中返回的组数,而不是 Oracle 中的行数

限制在 MySQL 问题的左连接中返回的行

RJDBC 限制来自 Netezza 的行

SQL 限制查询结果