获取不大于提供数量的记录

Fetch records that are not greater than provided quantity

数量作为参数出现,因此我只能获取最多 @quantity 的记录。我在 FROM 之后尝试的内容意义不大,因此下面给出了我需要实现该条件的查询。我在 WHERE 和使用 HAVING 中都尝试过,但无法:

SELECT prod_id,
    product,
    technology,
    price,
    quantity
FROM tbl_product
------SUM(quantity) <= @quantity

示例数据:

prod_id product technology  price   quantity
1       M1      ST          25.33   10
2       M2      ST          23.65   50
3       S1      ST          54.32   90
4       S2      PY          21.435  30
5       S3      PY          98.64   110

IF @quantity = 150 那么应该获取前 3 条记录。

您需要获得一个累计总和(基于您问题中的 "fetch up to"),使用 window 函数最有效。

尝试:

with cumulative as (
    SELECT prod_id,
      product,
      technology,
      price,
      quantity,
      sum(quantity) over (order by <order column>) as cumulative_quantity
    FROM tbl_product
) 
select 
    prod_id,
    product,
    technology,
    price,
    quantity
from cumulative where cumulative_quantity <= @quantity;

您需要提供一个顺序列来指示您希望累积总和使用什么顺序。

所以当@quantity = 150 时,您的结果将是:

prod_id product technology  price   quantity
1       M1      ST          25.33   10
2       M2      ST          23.65   50
3       S1      ST          54.32   90

(如果您使用 prod_id 作为按列排序)。

假设你想取prod_id排序的前N条累计和小于@quantity的记录,那么你可以试试下面的查询:

SELECT
    prod_id,
    product,
    technology,
    price,
    quantity
FROM tbl_product t1
WHERE (SELECT SUM(t2.quantity) FROM tbl_product t2
       WHERE t2.prod_id <= t1.prod_id) < @quantity

根据您可以找到的产品如下

SELECT distinct prod_id,
       product,
       technology,
       price,
FROM tbl_product
where product in (
SELECT product
FROM tbl_product
GROUP BY product
HAVING SUM(quantity) <= @quantity)