用于选择搜索参数的前几行的sql语句

标签 sql postgresql select

我在一个sql语句(如果存在的话)之后或者如何设置一个方法使用几个sql语句来实现下面的。

我有一个列表框和一个搜索文本框。

在搜索框中,用户将输入姓氏,例如史密斯。 然后我想用这样的东西查询数据库以进行搜索:

select * FROM customer where surname LIKE searchparam

这将为我提供姓氏包含:SMITH 的客户的所有结果。很简单,对吧?

我需要做的是限制返回的结果。如果搜索参数只是 S,这个语句可以给我 1000 行。 我想要的是结果,仅限于前 20 个匹配项和第一个匹配项之前的 10 行。

例如SMI搜索:

Sives
Skimmings
Skinner
Skipper
Slater
Sloan
Slow
Small
Smallwood
Smetain
Smith ----------- This is the first match of my query. But i want the previous 10 and following 20.
Smith
Smith
Smith
Smith
Smoday
Smyth
Snedden
Snell
Snow
Sohn
Solis
Solomon
Solway
Sommer
Sommers
Soper
Sorace
Spears
Spedding

有没有办法做到这一点? 尽可能少的sql语句。

原因?我正在为互联网连接速度较慢的用户创建一个应用。

我正在使用 POSTGRESQL v9

谢谢 安德鲁

最佳答案

WITH ranked AS (
  SELECT *, ROW_NUMBER() over (ORDER BY surname) AS rowNumber FROM customer
)
SELECT ranked.*
FROM ranked, (SELECT MIN(rowNumber) target FROM ranked WHERE surname LIKE searchparam) found
WHERE ranked.rowNumber BETWEEN found.target - 10 AND found.target + 20
ORDER BY ranked.rowNumber

SQL fiddle here .请注意, fiddle 使用示例数据,我将范围修改为之前的 3 个条目和过去的 6 个条目。

关于用于选择搜索参数的前几行的sql语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21407689/

相关文章:

sql - 如何在 Access 中使用 INSERT INTO 查询插入来自变量的记录

mysql - 给定一个行id,如何从mysql行中获取下一个最高数字

sql - 检索具有列最大值的行的属性

sql - PostGIS:注册一个没有 AddGeometryColumn 的 "geometry"列

mysql - 确保列中的值不相同

mysql - PostgreSQL如何用一条Insert语句插入多条记录

javascript - 如何使用 jQuery 将选定值设置为多个 Select 输入?

javascript - 如何将多个参数放入 OPTION for Javascript?

sql - 如何只选择满足条件的第一行?

MySQL查询以查找每月活跃用户