我有桌子:
我想得到N个已过期的产品为假,重量总和为example >= 5kg
。
我该怎么做这个查询?
非常感谢。
编辑:我的问题似乎并不是很清楚。例如,我可以拥有这些产品:例如,我想获得权重之和为3的前N个产品。顺序是相同的。
所以我想得到例如p1,p2和p3因为权重之和为3(在这种情况下N为3因为我需要3个产品),所以它是正确的。我可以得到p1和p4,这是正确的(在这种情况下,N是2,因为我只需要两个产品),或者p2和p4 ......等等。
答案 0 :(得分:3)
你可以写成:
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
答案 1 :(得分:0)
SELECT TOP 10 p.*
FROM Prodcts p
WHERE p.expired = 0
AND p.weight >= 5
但是,目前尚不清楚如何sum
单个记录。
答案 2 :(得分:0)
要按列/表达式过滤数据,您需要使用WHERE
子句。例如:
SELECT *
FROM DataSource
WHERE column = 0 -- or column = 'false'
要通过聚合表达式过滤数据,您需要使用HAVING
子句。例如:
SELECT *
FROM DataSource
WHERE column = 0 -- or column = 'false'
HAVING SUM(something) > 100
为了获得某些内容的TOP
记录,您应该使用适当的ORDER BY
子句 - 您需要按照TOP N
始终会给您相同结果的方式对数据进行排序。
答案 3 :(得分:0)
如果你需要总结你的问题所暗示的重量,请尝试
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是所需数量