我有一个带有时间序列数据的表S,如下所示:
key day delta
Run Code Online (Sandbox Code Playgroud)
对于给定的密钥,它可能但不太可能缺少天数.
我想从delta值(正INT)构造一个累积列,以便将此累积数据插入另一个表中.这是我到目前为止所得到的:
SELECT key, day,
SUM(delta) OVER (PARTITION BY key ORDER BY day asc RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW),
delta
FROM S
Run Code Online (Sandbox Code Playgroud)
在我的SQL风格中,默认窗口子句是在UNBOUNDED PRECEDING和CURRENT ROW之间的范围,但我把它留在那里是明确的.
这个查询非常慢,比旧的破解查询慢了几个数量级,这个查询为累计计数填充了0.有关生成累积数字的其他方法的建议吗?
我确实在这里查看解决方案: 按表中的分组记录运行总计
我正在使用的RDBM是Vertica.Vertica SQL排除了那里的第一个subselect解决方案,它的查询规划器预测第二个左外连接解决方案的成本比我上面显示的分析形式高出约100倍.
我有这种格式的数据集
User
1
2
3
2
3
1
1
Run Code Online (Sandbox Code Playgroud)
现在我想添加一个列计数,用于计算用户的出现次数.我希望以下格式输出.
User Count
1 1
2 1
3 1
2 2
3 2
1 2
1 3
Run Code Online (Sandbox Code Playgroud)
我的解决方案很少,但所有这些解决方案都有点慢.
我的data.frame现在有100,000行,很快就可能达到100万行.我需要一个快速的解决方案.
我必须在我的应用程序中显示总计列的运行总数...所以我使用以下查询来查找运行总计...我发现两者都按照我的需要工作.在一个我使用左连接与group by和另一个我使用子查询.
现在我的问题是,当我的数据每天增加数千时,哪一个更快,如果数据将限制在1000或2000行,那么哪一个更好......而且任何其他方法比这两个更快? ??
declare @tmp table(ind int identity(1,1),col1 int)
insert into @tmp
select 2
union
select 4
union
select 7
union
select 5
union
select 8
union
select 10
SELECT t1.col1,sum( t2.col1)
FROM @tmp AS t1 LEFT JOIN @tmp t2 ON t1.ind>=t2.ind
group by t1.ind,t1.col1
select t1.col1,(select sum(col1) from @tmp as t2 where t2.ind<=t1.ind)
from @tmp as t1
Run Code Online (Sandbox Code Playgroud) 我有一张桌子,其客户,用户和收入类似于以下(实际上有数千条记录):
Customer User Revenue
001 James 500
002 James 750
003 James 450
004 Sarah 100
005 Sarah 500
006 Sarah 150
007 Sarah 600
008 James 150
009 James 100
Run Code Online (Sandbox Code Playgroud)
我想要做的只是返回占用户总收入80%的最高消费客户.
要手动执行此操作,我会根据收入对James的客户进行排序,计算总计百分比和运行总百分比,然后仅返回记录,直到达到运行总计达到80%:
Customer User Revenue % of total Running Total %
002 James 750 0.38 0.38
001 James 500 0.26 0.64
003 James 450 0.23 0.87 <- Greater than 80%, last record
008 James 150 0.08 0.95
009 James 100 0.05 1.00
Run Code Online (Sandbox Code Playgroud)
我尝试过使用CTE但到目前为止已经空白了.有没有办法通过单个查询而不是在Excel工作表中手动执行此操作?
我正在使用SQL Server 2017作为后端存储表和视图的MS Access前端.
我想根据股票交易表计算(在SQL Server端)Stockhouses(Bestand),剩余库存(Restbestand)和预留库存(Reserviert)来自仓库(Lager)和现场仓库(Baustelle).
交易可能是盘点(Bestandserfassung),stockcorrection(Bestandskorrektur),转移到库存(Einlagern),库存释放(Auslagern)和重新定位(Umlagern).大多数交易都有来源和目的地以及物料的数量和类型.
编辑:澄清:Restbestand是ZielTyp ='Lagerplatz'以及QuellTyp ='Lagerplatz'ak仓库的剩余库存.它是计算股票+交易.每年从仓库交易Buchungsart ='Bestandserfassung'开始,以设置库存中三种不同材料(标准,rutschhemmend,dick)的起始数量(Bestand).也许某些材料会丢失,然后可以纠正这些数量.因此,第7行使用Buchungsart ='Bestandskorrektur'(500x标准+ -10x标准= 490x标准).这两种交易类型"Bestandserfassung/Bestandskorrektur"没有来源,因为它只影响目的地仓库.也许某个仓库的库存太少,然后可以将物料从源仓库发送到此目标仓库.这是Buchungsart ='Umbuchung'.添加三个交易可以获得库存数量(Bestand).在这种情况下,目的地仓库始终是ZielBez.一年中,材料离开仓库,稍后返回.这是Buchungsart =,Auslagern'或者Einlagern'.如果物料离开数量是负的并且仓库是源(QuellBez),如果它返回它是正的并且仓库是目的地.
我尝试了几个SUM OVER语句,但我无法实现目标.
我们来看看我得到了什么:
CREATE TABLE [dbo].[TestDaten]
(
[BuchID] [int] NOT NULL,
[BuchPosID] [int] NOT NULL,
[BuchungsArtID] [int] NULL,
[ArtikelID] [int] NOT NULL,
[Position] [int] NOT NULL,
[BuchungsNr] [int] NOT NULL,
[BuchungsDatum] [datetime2](0) NULL,
[BuchungsArt] [nvarchar](255) NULL,
[QuellTyp] [nvarchar](255) NULL,
[ZielTyp] [nvarchar](255) NULL,
[QuellBez] [nvarchar](255) NULL,
[ZielBez] [nvarchar](255) NULL,
[Bezeichnung] [nvarchar](255) NULL,
[Menge] [int] NOT NULL
) ON [PRIMARY]
GO
INSERT [dbo].[TestDaten] ([BuchID], [BuchPosID], [BuchungsArtID], …Run Code Online (Sandbox Code Playgroud) 给出(虚拟)向量
index=log(seq(10,20,by=0.5))
Run Code Online (Sandbox Code Playgroud)
我想计算具有居中窗口的运行平均值和每端的锥形窗口,即第一个条目保持不变,第二个是窗口大小的平均值3,依此类推,直到达到指定的窗口大小.
这里给出的答案:计算移动平均线,似乎都会产生一个较短的向量,切断窗口太大的起点和终点,例如:
ma <- function(x,n=5){filter(x,rep(1/n,n), sides=2)}
ma(index)
Time Series:
Start = 1
End = 21
Frequency = 1
[1] NA NA 2.395822 2.440451 2.483165 2.524124 2.563466 2.601315
[9] 2.637779 2.672957 2.706937 2.739798 2.771611 2.802441 2.832347 2.861383
[17] 2.889599 2.917039 2.943746 NA NA
Run Code Online (Sandbox Code Playgroud)
同样的
rollmean(index,5)
Run Code Online (Sandbox Code Playgroud)
来自动物园的包裹
有没有一种快速的方法来实现锥形窗口而不需要编写循环编码?
这就是表格的样子:
create table IncomeTest (SubjectId int, Date_Value date, debit number, credit number);
insert into IncomeTest values (1, '7-SEP-2017', 11000, 0);
insert into IncomeTest values (1, '7-DEC-2017', 6000, 0);
insert into IncomeTest values (1, '9-JAN-2018', 0, 16110);
insert into IncomeTest values (1, '9-JUL-2018', 0, 619.6);
insert into IncomeTest values (1, '23-JUL-2018', 0, 270.4);
commit;
Run Code Online (Sandbox Code Playgroud)
借方代表现金,贷方代表现金.插入表后,您将获得以下数据:
SubjectID | Date_value | Debit | Credit
1 9/7/2017 11000 0
1 12/7/2017 6000 0
1 1/9/2018 0 16110.0
1 7/9/2018 0 619.6
1 7/23/2018 0 …Run Code Online (Sandbox Code Playgroud) 使用Crystal Reports我试图在标题中显示所有标签所在的数据库字段的运行总计.
我试图通过将运行总计(RTversion)放入公式字段中,并执行以下操作:
Shared stringvar CurrentVers;
CurrentVers := {#CurrentVers};
Run Code Online (Sandbox Code Playgroud)
然后在页眉部分我有以下内容:
Shared stringvar CurrentVers;
EvaluateAFter({#currentVers});
CurrentVers;
Run Code Online (Sandbox Code Playgroud)
{#CurrentVers}运行第一大号码.
这是不正确的?
更新:目标是在标签附近的标题中显示最新版本,以显示当前版本的比较内容.
我在Oracle数据库中有一个表,其中包含以下感兴趣的字段:位置,产品,日期,金额.我想编写一个查询,按位置,产品和日期获得总计金额.我在下面给出了一个示例表,我希望得到的结果是什么.
我可以得到一个总计,但是当我到达一个新的位置/产品时我无法重置它.这是我到目前为止的代码,任何帮助都会非常感激,我觉得这是一个简单的修复.
select a.*, sum(Amount) over (order by Location, Product, Date) as Running_Amt
from Example_Table a
+----------+---------+-----------+------------+------------+
| Location | Product | Date | Amount |Running_Amt |
+----------+---------+-----------+------------+------------+
| A | aa | 1/1/2013 | 100 | 100 |
| A | aa | 1/5/2013 | -50 | 50 |
| A | aa | 5/1/2013 | 100 | 150 |
| A | aa | 8/1/2013 | 100 | 250 |
| A | bb | 1/1/2013 | 500 …Run Code Online (Sandbox Code Playgroud) 我有一个表id,cost和priority列:
create table a_test_table (id number(4,0), cost number(15,2), priority number(4,0));
insert into a_test_table (id, cost, priority) values (1, 1000000, 10);
insert into a_test_table (id, cost, priority) values (2, 10000000, 9);
insert into a_test_table (id, cost, priority) values (3, 5000000, 8);
insert into a_test_table (id, cost, priority) values (4, 19000000, 7);
insert into a_test_table (id, cost, priority) values (5, 20000000, 6);
insert into a_test_table (id, cost, priority) values (6, 15000000, 5);
insert into a_test_table (id, …Run Code Online (Sandbox Code Playgroud)