我希望区分两个累计金额并按日期排序,但是日期列位于与导致问题的日期不同的表上。 (date
位于eventinfo
表格中,我要使用的列位于results
表格中。
我希望获得results.prize
和results.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。
答案 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;