Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何获取求和的前N行≥ X?_Sql_Sql Server - Fatal编程技术网

Sql 如何获取求和的前N行≥ X?

Sql 如何获取求和的前N行≥ X?,sql,sql-server,Sql,Sql Server,我有一张桌子: 产品SID,重量,过期。。。 我想得到N个过期的第一批产品是假的,重量之和是表格示例>=5kg 我该如何进行此查询 非常感谢 编辑:我的问题似乎不是很清楚。例如,我可以使用以下产品: p1:ID=1,重量=1; p2:ID=2,重量=1; p3:ID=3,重量=1; p4:ID=4,重量=2; 例如,我想得到前N个乘积,其权重之和为3。顺序是一样的 我想得到,比如p1,p2和p3,因为权重之和是3,在这种情况下,N是3,因为我需要3个乘积,所以它是正确的。我可以得到p1和p4,在

我有一张桌子:

产品SID,重量,过期。。。 我想得到N个过期的第一批产品是假的,重量之和是表格示例>=5kg

我该如何进行此查询

非常感谢

编辑:我的问题似乎不是很清楚。例如,我可以使用以下产品:

p1:ID=1,重量=1; p2:ID=2,重量=1; p3:ID=3,重量=1; p4:ID=4,重量=2; 例如,我想得到前N个乘积,其权重之和为3。顺序是一样的

我想得到,比如p1,p2和p3,因为权重之和是3,在这种情况下,N是3,因为我需要3个乘积,所以它是正确的。我可以得到p1和p4,在这种情况下是正确的,因为我只需要两个乘积,或者p2和p4。。。等等

SELECT TOP 10 p.*
FROM Prodcts p
WHERE p.expired = 0
AND   p.weight >= 5

但是,目前还不清楚如何对单个记录求和。

要按列/表达式筛选数据,需要使用WHERE子句。例如:

SELECT *
FROM DataSource
WHERE column = 0 -- or column = 'false'
SELECT *
FROM DataSource
WHERE column = 0 -- or column = 'false'
HAVING SUM(something) > 100

为了按聚合表达式筛选数据,需要使用HAVING子句。例如:

SELECT *
FROM DataSource
WHERE column = 0 -- or column = 'false'
SELECT *
FROM DataSource
WHERE column = 0 -- or column = 'false'
HAVING SUM(something) > 100

为了获得某项内容的顶级记录,您应该使用适当的order BY子句——您需要对数据进行排序,以便TOP N始终给出相同的结果

如果你需要对你的问题所暗示的权重求和,试试下面的方法

Select ID, [Weight]
From
(select ID, SUM([weight]) as [weight], Row_number() over(order by ID) as N
Where Expired = 0
Having SUM(weight) > = 5) X
where N <= @x
或者如果你想要最重的

Select ID, [Weight]
From
(select ID, SUM([weight]) as [weight], Row_number() over(order by SUM([weight]) desc) as N
Where Expired = 0
Having SUM(weight) > = 5) X
where N <= @x
其中@X是所需的数字

您可以写为:

select top 10 * from -- top N goes here
 (
 SELECT *,SUM(weight) OVER (partition BY expired ORDER BY Id asc) as cumulativesum
 FROM 
 Products
 WHERE expired = 0
  )T 
  where cumulativesum>=5

选择顶部N。。。哪里按…排序?在这种情况下,重量之和是什么意思?你想加多少?一条记录怎么能被汇总呢?现在还不清楚你到底想在这里实现什么。你能,至少,向我们展示一下示例输入和期望的输出吗?向我们展示您已经拥有的查询基础可能也会很有用。在我看来,问题似乎是先获得x,而不是试验产品,但x是有限的,因此SumWeight限制在5千克。但是,我仍然可以解释错误。哪个SQL Server版本?跑步应该很容易。非常感谢演示,我有点怀疑。第一个结果是:ID=3,累计=5。如果ID=3的行的权重为4,那么累积和怎么可能是5?