PROGRESS数据库的SQL命令

时间:2009-10-06 19:47:41

标签: sql join progress-db

请耐心等待我的SQL新手 - 我正在尝试使用PROGRESS db中的连接编写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。

2 个答案:

答案 0 :(得分: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的过滤(假设你只想k-cmp-no超过100),你可以在group by之后使用HAVING,例如:

    HAVING MIN(estdie_0。“k-cmp-no”)> 100

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

答案 1 :(得分:0)

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

示例:

./run ./manage.py test --settings=bx.settings.local
['/beneple/bx/templates']

希望这有帮助