请耐心等待我的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。
答案 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查询的一般语法是:
使用MIN(),MAX(),AVG(),SUM()等聚合函数来选择所需的列...(根据您是否需要最小值,最大值等选择函数)。我列出的是标准的,然后你的数据库通常会给你一些额外的。
将您选择的所有其他列添加到查询末尾的GROUP BY中除函数中的那些之外。
您的GROUP BY必须在您的WHERE之后,但在您的ORDER BY之前。
如果你想对函数进行类似WHERE的过滤(假设你只想k-cmp-no超过100),你可以在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
答案 1 :(得分:0)
Progress(OE 11.2)支持OFFSET FETCH,它与mysql中的LIMIT OFFSET相同。
示例:
./run ./manage.py test --settings=bx.settings.local
['/beneple/bx/templates']
希望这有帮助