SQLite累积和排序

时间:2016-01-23 23:14:59

标签: sql sqlite

我希望区分两个累计金额并按日期排序,但是日期列位于与导致问题的日期不同的表上。 (date位于eventinfo表格中,我要使用的列位于results表格中。

我希望获得results.prizeresults.totalbuyin之间差异的总计,总排序eventinfo.date results.event=eventinfo.eventname。我还希望按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。

1 个答案:

答案 0 :(得分: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

这是一个提示: 您在EventInfo表中创建了一个整数主键(ID),最好在Results表的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;