2016-01-23 203 views
0

我正在寻找2个累计总和和按日期排序之间的差异,但日期列是在不同的表上,似乎是导致问题的日期。 (date位于eventinfo表中,我想使用的列位于results表中)。SQLite累计总和排序

我想要获得results.prizeresults.totalbuyin之间的差异总计,其中results.event=eventinfo.eventname的总订购量为eventinfo.date。我还想过滤查询results.playername,这样我就可以获得任何单个玩家的总分。我能得到的日期栏出现在查询和订单日期,但总额在的ID号的顺序发生:

结果表

ID;PlayerName;TotalBuyIn;Prize;Rebuys;Event; 
1;Ole Schemion;100000;1062785;0;Aria $100K July 2014; 
2;Isaac Haxton;100000;813394;0;Aria $100K July 2014; 
3;Daniel Colman;100000;796821;0;Aria $100K July 2014; 
4;Daniel Cates;100000;297000;0;Aria $100K July 2014; 
5;Cary Katz;100000;0;0;Aria $100K July 2014; 

EventInfo表

ID;EventName;Date;Location;Country;PokerTour;UniquePlayers;Rebuys; 
1;ACOP 500k 2014;2014-11-01;City of Dreams;Macau;APPT;52;50; 
2;ACOP Super High Roller 2015;2015-11-13;City of Dreams;Macau;APPT;34;17; 
3;Alpha 8 Florida 2013;2013-08-26;Seminole Hard Rock;USA;WPT;18;3; 
4;Alpha 8 Florida 2015;2015-01-17;Seminole Hard Rock;USA;WPT;6;0; 
5;Aria $100K July 2014;2014-02-14;Emperor Palace;South Africa;WPT;9;1; 

在这些表results.event=eventinfo.eventname

失败的查询

SELECT t1.id, 
    t1.prize, 
    t1.TotalBuyIn, 
    t1.PlayerName, 
    (SUM(t2.prize)) - (SUM(t2.totalbuyin)), 
    eventinfo.Date 
FROM results t1 
INNER JOIN results t2 ON t1.id >= t2.id and t2.PlayerName = "Erik Seidel" 
INNER JOIN eventinfo ON t1.Event = eventinfo.EventName 
Where t1.PlayerName = "Erik Seidel" 
GROUP BY t1.id 
ORDER BY eventinfo.Date 

电流输出

t1.id;t1.prize;t1.TotalBuyIn;t1.PlayerName;(SUM(t2.prize)) - (SUM(t2.totalbuyin));eventinfo.Date; 
1314;618139;98902;Erik Seidel;135685;2011-01-22; 
1292;2472555;247255;Erik Seidel;-383552;2011-01-27; 
1401;1092780;100000;Erik Seidel;1128465;2011-05-18; 
1425;0;100000;Erik Seidel;1028465;2011-12-09; 
1127;0;100000;Erik Seidel;-2341985;2012-01-05; 

8号线是明显的问题,但我似乎无法重写代码来修复它。尽管我认为我已经加入了表格,但输入t1.date>=t2.date将不起作用。如果这有所作为,我正在使用SQLite3。

+0

我建议您修改您的问题以包含样本数据和期望的结果。一个非工作的查询通常不足以将其想要做的事告诉给不熟悉该问题的其他人。 –

+0

如果eventinfo.EventName是一个Char字段,那么将唯一ID列添加到eventinfo表可能是一个好主意。通常不推荐使用文本列键。 –

+0

什么是results.id列?乍看之下,它似乎是一个UID,但是您使用它就好像它是一个与玩家相关的值。结果表是否每个玩家有多行? –

回答

0

我会创造这样的第一个查询:

SELECT Date, EventName, (SUM(Prize)) - (SUM(TotalBuyIn)) AS Net 
FROM results 
INNER JOIN eventinfo ON Event = EventName 
GROUP BY Date, EventName 
ORDER BY eventinfo.Date 

我会创造这样的第二个查询:

SELECT PlayerName, (SUM(Prize) - SUM(TotalBuyIn)) AS Net, Date, EventName 
FROM Results 
INNER JOIN EventInfo ON Event = EventName 
GROUP BY PlayerName 
ORDER BY Date 

这里有个小技巧: 您创建了一个整数主键(ID )在EventInfo表中,最好在结果表的Event列中使用这些整数值。使用文本值将表连接在一起会产生不必要的麻烦。

更新: 以下解决方案仅适用于一名玩家,但您已在示例中指定了特定玩家,所以我相信这就是您正在寻找的。

CREATE TEMPORARY TABLE TEMP AS SELECT Date, PlayerName, Prize, TotalBuyIn, SUM(t1.Prize - T1.TotalBuyIn) AS Net 
FROM Results t1 
INNER JOIN EventInfo t3 ON t1.Event = t3.EventName 
GROUP BY t1.PlayerName, t3.Date; 

SELECT Date, PlayerName, Prize, TotalBuyIn, 
(SELECT SUM(Net) FROM TEMP t2 WHERE t1.Date >= t2.Date AND PlayerName='Erik Seidel') AS Net 
FROM TEMP t1 
WHERE PlayerName='Erik Seidel' 
GROUP BY Date 
ORDER BY Date; 

DROP TABLE TEMP; 
+0

感谢您的回答, –

+0

感谢您的回答,虽然看起来不是我想要的,但可能是因为我没有正确解释它。我希望每个“results.event”的结果总数为('results.prize' - 'results.totalbuyin'),以该玩家的日期顺序排列。如果你看到我的问题,我qurey的输出接近我想要的,但运行总数按照'results.id'而不是'eventinfo.date'的顺序,这正是我想要的。感谢有关在其他表中使用主键的提示,现在看起来非常有意义。 –

+0

仍然不能真正解释它,我的示例查询中的运行总数虽然按日期排序,但运行总数的计算方式就好像它是按'results.id'命令排序的 –