1

请耐心等待我的 SQL 新手——我正在尝试编写一个带有 PROGRESS 数据库连接的 SQL 命令。然后我想从连接中只选择第一个匹配的记录。我想使用 LIMIT 但 PROGRESS 不支持。我认为 MIN 或 TOP 也可以,但语法有问题。这是当前的语法:

SELECT esthead_0."k-est-code", estdie_0."estd-size2", estdie_0."k-cmp-no", estdie_0."estd-cal"
  FROM VISION.PUB.estdie estdie_0 
INNER JOIN VISION.PUB.esthead esthead_0 ON estdie_0."k-est-code" = esthead_0."k-est-code"
 WHERE estdie_0."k-cmp-no" = (SELECT MIN("k-cmp-no") 
                                FROM VISION.PUB.estdie estdie_0 )

这将从整个表中选择 MIN,但我想要连接为每个“k-est-code”返回的记录的 MIN。

4

2 回答 2

0

要完成您正在完成的工作,您需要使用聚合函数和 GROUP BY。

这是正确的查询:

SELECT esthead_0."k-est-code", estdie_0."estd-size2", MIN(estdie_0."k-cmp-no") AS k-cmp-no-minimum, estdie_0."estd-cal"
  FROM VISION.PUB.estdie estdie_0 
  INNER JOIN VISION.PUB.esthead esthead_0 ON estdie_0."k-est-code" = esthead_0."k-est-code"
 GROUP BY esthead_0."k-est-code", estdie_0."estd-size2", estdie_0."estd-cal"

添加 GROUP BY / Aggregate 查询的一般语法是:

  1. 使用诸如 MIN()、MAX()、AVG()、SUM() 之类的聚合函数来选择您想要的列...(根据您是否想要最小值、最大值等来选择函数)。我列出了一些标准的,然后你的数据库通常也会给你一些额外的。

  2. 将您选择的所有其他列添加到查询末尾的 GROUP BY 中,函数中的列除外。

  3. 您的 GROUP BY 必须出现在您的 WHERE 之后,但在您的 ORDER BY 之前。

  4. 如果你想对函数进行类似 WHERE 的过滤(比如你只想要超过 100 个的 k-cmp-no),你可以在 group by 之后使用 HAVING,例如:

    HAVING MIN(estdie_0."k-cmp-no") > 100

Google for Group By 和 Aggregate 函数以获取有关此 SQL 概念的更多信息。它在所有数据库中的工作方式与标准 ANSI SQL 相同。有关示例的更全面介绍,请参阅此页面:http: //www.w3schools.com/sql/sql_groupby.asp

于 2011-10-18T05:39:50.287 回答
0

Progress (OE 11.2) 支持与 mysql 中的 LIMIT OFFSET 相同的 OFFSET FETCH。

例子:

SQLExplorer>select FirstName , LastName , EmpNum from pub.employee order by empnum offset 10 rows fetch next 10 rows only;
FirstName                      LastName                                                EmpNum
------------------------------ -------------------------------------------------- -----------
Frank                          Garsen                                                      11
Jenny                          Morris                                                      12
Luke                           Sanders                                                     13
Marcy                          Adams                                                       14
Alex                           Simons                                                      15
Holly                          Atkins                                                      16
Larry                          Barry                                                       17
Jean                           Brady                                                       18
Larry                          Dawsen                                                      19
Dan                            Flanagan                                                    20

希望这可以帮助

于 2016-07-29T09:00:33.850 回答