我有一个带有ID列的表和另一个带有数字的列.一个ID可以有多个数字.例如
ID | Number
1 | 25
1 | 26
1 | 30
1 | 24
2 | 4
2 | 8
2 | 5
Run Code Online (Sandbox Code Playgroud)
现在基于这些数据,在一个新表中,我希望有这个
ID | Low | High
1 | 24 | 26
1 | 30 | 30
2 | 4 | 5
2 | 8 | 8
Run Code Online (Sandbox Code Playgroud)
如你所见,我想合并任何数字连续的数据,如24,25,26.所以现在低点是24,高点是26,然后30仍然是一个单独的范围.我正在处理大量的数据,所以我宁愿不使用游标来提高性能(这是我以前做过的事情,而且减慢了很多事情)......实现这个目标的最佳方法是什么? ?我不是SQL专家,所以我不确定是否有可用的功能可以使这更容易,或者最快的方法是什么.
谢谢您的帮助.
我对这个陈述有些麻烦,毫无疑问我对这个选择陈述的回复是无知的:
declare @myInt as INT
set @myInt = (select COUNT(*) from myTable as count)
if(@myInt <> 0)
begin
print 'there's something in the table'
end
Run Code Online (Sandbox Code Playgroud)
myTable中有记录,但是当我运行上面的代码时,print语句永远不会运行.进一步检查表明,在上面的赋值后,myInt实际上为零.我确定我错过了一些东西,但我认为选择计数会返回一个我可以在上面使用的标量?
我有一个Linq集合Things,其中Thing有一个Amount(十进制)属性.
我正在尝试针对特定事物的子集对此进行聚合:
var total = myThings.Sum(t => t.Amount);
Run Code Online (Sandbox Code Playgroud)
这很好用.但后来我添加了一个条件,让我在结果中没有任何东西:
var total = myThings.Where(t => t.OtherProperty == 123).Sum(t => t.Amount);
Run Code Online (Sandbox Code Playgroud)
而不是得到total = 0或null,我得到一个错误:
System.InvalidOperationException:无法将null值分配给类型为System.Decimal的成员,该成员是非可空值类型.
这真是令人讨厌,因为我没想到这种行为.我本来期望总数为零,也许是null - 但肯定不会抛出异常!
我究竟做错了什么?什么是解决方法/修复?
编辑 - 例子
感谢大家的评论.这是一些代码,复制和粘贴(未简化).它是LinqToSql(也许这就是为什么你无法重现我的问题):
var claims = Claim.Where(cl => cl.ID < 0);
var count = claims.Count(); // count=0
var sum = claims.Sum(cl => cl.ClaimedAmount); // throws exception
Run Code Online (Sandbox Code Playgroud) 我正在使用R中的"by"函数来切断数据框并将函数应用于不同的部分,如下所示:
pairwise.compare <- function(x) {
Nright <- ...
Nwrong <- ...
Ntied <- ...
return(c(Nright=Nright, Nwrong=Nwrong, Ntied=Ntied))
}
Z.by <- by(rankings, INDICES=list(rankings$Rater, rankings$Class), FUN=pairwise.compare)
Run Code Online (Sandbox Code Playgroud)
结果(Z.by)看起来像这样:
: 4
: 357
Nright Nwrong Ntied
3 0 0
------------------------------------------------------------
: 8
: 357
NULL
------------------------------------------------------------
: 10
: 470
Nright Nwrong Ntied
3 4 1
------------------------------------------------------------
: 11
: 470
Nright Nwrong Ntied
12 4 1
Run Code Online (Sandbox Code Playgroud)
我想要的是将此结果转换为数据框(不存在NULL条目),所以它看起来像这样:
Rater Class Nright Nwrong Ntied
1 4 357 3 0 0
2 10 470 3 4 …Run Code Online (Sandbox Code Playgroud) 我正在尝试理解传奇,同时我有一种特定的思考方式 - 但我不确定我的想法是否正确.因此,我想详细说明并让别人告诉我这是对还是错.
根据我的理解,传奇是解决长期运行流程建模问题的解决方案.长时间运行意味着:涉及多个命令,多个事件以及可能的多个聚合.该进程未在其中一个参与聚合内建模,以避免它们之间的依赖关系.
基本上,saga只不过是一个命令/事件处理程序,它对内部和外部命令/事件作出反应.它不包含其自身的逻辑,它只是一个(有限)状态机,并为此提供的任务,例如当事件发生X,发送命令ÿ.
Sagas持久存储到事件存储以及聚合,与特定的聚合实例相关联,因此在使用此特定聚合(或聚合集合)时会重新加载.
这是正确的吗?
我想做相同的以下内容,但使用data.table的"by":
dt <- data.table(V1=rnorm(100), V2=rnorm(100), V3=rnorm(100), ...
group=rbinom(100,2,.5))
dt.agg <- aggregate(dt, by=list(dt$group), FUN=mean)
Run Code Online (Sandbox Code Playgroud)
我知道我可以这样做:
dt.agg <- dt[, list(V1=mean(V1), V2=mean(V2), V3=mean(V3)), by=group]
Run Code Online (Sandbox Code Playgroud)
但对于这种情况,我正在考虑我有100个左右的列V1-V100(而且我总是希望通过单个因子聚合所有这些,如上面的汇总)所以我上面提到的data.table解决方案是'可行.
我收到以下错误:
Error 1 [rsInvalidAggregateScope] The Value expression for the text box
‘Textbox2’ has a scope parameter that is not valid for an aggregate function.
The scope parameter must be set to a string constant that is equal to either
the name of a containing group, the name of a containing data region, or
the name of a dataset.
Run Code Online (Sandbox Code Playgroud)
我的Textbox2背后的表达式(我添加了一些空格以便于阅读):
Iif(Parameters!ReportParameterPersoneelsNr.Value.Equals(String.Empty),
"Prestaties " + First(Fields!firmanaam.Value, "DataSetHrm") +
"(" + First(Fields!indienstfirmanr.Value, "DataSetHrm") + ")",
"Prestaties " + First(Fields!naam.Value, "DataSetHrm") + " " …Run Code Online (Sandbox Code Playgroud) aggregate concatenation reporting-services ssrs-2008 ssrs-expression
假设我有这个给定的数据
{
"name" : "ABC",
"favorite_cars" : [ "ferrari","toyota" ]
}, {
"name" : "ABC",
"favorite_cars" : [ "ferrari","toyota" ]
}, {
"name" : "GEORGE",
"favorite_cars" : [ "honda","Hyundae" ]
}
Run Code Online (Sandbox Code Playgroud)
每当我在搜索最喜欢的汽车是丰田的人时查询这些数据,它就会返回这些数据
{
"name" : "ABC",
"favorite_cars" : [ "ferrari","toyota" ]
}, {
"name" : "ABC",
"favorite_cars" : [ "ferrari","toyota" ]
}
Run Code Online (Sandbox Code Playgroud)
结果是两个名称为ABC的记录.如何仅选择不同的文档?我想得到的结果只是这个
{
"name" : "ABC",
"favorite_cars" : [ "ferrari","toyota" ]
}
Run Code Online (Sandbox Code Playgroud)
这是我的查询
{
"fuzzy_like_this_field" : {
"favorite_cars" : {
"like_text" : "toyota",
"max_query_terms" : 12
}
}
} …Run Code Online (Sandbox Code Playgroud) java aggregate nosql elasticsearch spring-data-elasticsearch
我有一个如下所示的数据框:
D X Y Z
A 22 16 23
A 21 16 22
A 20 17 21
B 33 50 11
B 34 53 12
B 34 55 13
C 44 34 11
C 45 33 11
C 45 33 10
D 55 35 60
D 57 34 61
E 66 36 13
E 67 38 14
E 67 37 13
Run Code Online (Sandbox Code Playgroud)
我想获取所有列值中分类变量的最小值和最大值D,因此输出数据框应如下所示:
D Xmin Xmax Ymin Ymax Zmin Zmax
A 20 22 16 17 21 23
B 33 …Run Code Online (Sandbox Code Playgroud) 您不能(不应该)将非聚合放在查询SELECT行中GROUP BY.
但是,我想访问与max相关联的非聚合之一.用简单的英语,我想要一张每种类型最老的表格.
CREATE TABLE stuff (
id int,
kind int,
age int
);
Run Code Online (Sandbox Code Playgroud)
这个查询给了我以后的信息:
SELECT kind, MAX(age)
FROM stuff
GROUP BY kind;
Run Code Online (Sandbox Code Playgroud)
但它不是最有用的形式.我真的希望id与每一行相关联,以便我可以在以后的查询中使用它.
我正在寻找这样的东西:
SELECT id, kind, MAX(age)
FROM stuff
GROUP BY kind;
Run Code Online (Sandbox Code Playgroud)
这输出:
SELECT stuff.*
FROM
stuff,
( SELECT kind, MAX(age)
FROM stuff
GROUP BY kind) maxes
WHERE
stuff.kind = maxes.kind AND
stuff.age = maxes.age
Run Code Online (Sandbox Code Playgroud)
看起来真的应该离开以获取这些信息而无需加入.我只需要SQL引擎在计算最大值时记住其他列.