我有这个SQL查询:
SELECT Foo, Bar, SUM(Values) AS Sum
FROM SomeTable
GROUP BY Foo, Bar
ORDER BY Foo DESC, Sum DESC
这将导致类似于以下的输出:
47 1 100
47 0 10
47 2 10
46 0 100
46 1 10
46 2 10
44 0 2
我想每个Foo仅保留第一行,而忽略其余的行。
47 1 100
46 0 100
44 0 2
我怎么做?
declare @sometable table ( foo int, bar int, value int )
insert into @sometable values (47, 1, 100)
insert into @sometable values (47, 0, 10)
insert into @sometable values (47, 2, 10)
insert into @sometable values (46, 0, 100)
insert into @sometable values (46, 1, 10)
insert into @sometable values (46, 2, 10)
insert into @sometable values (44, 0, 2)
;WITH cte AS
(
SELECT Foo, Bar, SUM(value) AS SumValue, ROW_NUMBER() OVER(PARTITION BY Foo ORDER BY FOO DESC, SUM(value) DESC) AS RowNumber
FROM @SomeTable
GROUP BY Foo, Bar
)
SELECT *
FROM cte
WHERE RowNumber = 1
问题内容: 我有这张表 language_id是指记录所用的语言。我想做的是检索 每个language_id中 最近的五个记录(ORDER BY time_posted DESC LIMIT 5)的列表。我可以使用许多不同的SQL查询在PHP中循环执行此操作,但我觉得有一种更简单的方法。 我必须得到一本有关SQL的书,哈哈。 谢谢。 问题答案: 这是我在MySQL中解决此“每组前N个”类型的查询的
问题内容: 我有一个生成的DataFrame,如下所示: 结果如下: 如您所见,DataFrame按升序排列,然后按降序排列。 我想选择每个组的第一行,即 从小时== 0的组中选择(0,cat26,30.9) 从小时= 1的组中选择(1,cat67,28.5) 从小时== 2的组中选择(2,cat56,39.6) 等等 因此,所需的输出将是: 能够选择每个组的前N行也可能很方便。 任何帮助都将受到
问题内容: 在C#中将是这样的: Linq-To-Sql将其转换为以下T-SQL代码: 但是它与MySQL不兼容。 问题答案: 当我写 有用。在其他RDBMS中,IIRC这样的语句是不可能的,因为不属于任何组合键的不属于分组键的列就被引用了。 这种“怪癖”的行为与我想要的行为非常接近。所以我用它来获得想要的结果:
问题内容: 如标题所示,我想选择以分组的每组行的第一行GROUP BY。 具体来说,如果我有一个purchases看起来像这样的表: 我的输出: 我想查询每个人id最大的购买金额(total)customer。像这样的东西: Expected Output: 问题答案: 在PostgreSQL中,这通常更简单,更快捷(下面将进行更多性能优化): 或更短(如果不太清楚),输出列的序号为: 如果tot
问题内容: 我有一张桌子,如下所示: 这是样本 的汇总功能仅允许我获得每个方面的最高分。我想查询以获得每个人的最高2分,我该怎么办? 我的预期输出是 问题答案: SQLFiddle演示
问题内容: 我只需要选择给定datetime变量的月份的第一天。 我知道使用这种代码非常容易: 但这不是很优雅,也可能不是很快。 有一个更好的方法吗?我正在使用SQL Server 2008。 问题答案: