需要棘手的SQL查询帮助

时间:2013-06-27 17:22:27

标签: sql sqlite

我最近写了一些代码,记录来自博彩交易所网站的数据。该代码创建了一个简单的表SQLite3数据库。当游戏进行中时,该数据库存储游戏的赔率。

.schema看起来像这样:

CREATE TABLE in_play (
    status text,
    date text,
    marketID int,
    marketName text,
    total_matched real,
    home_back real,
    home_lay real,
    away_back real,
    away_lay real,
    draw_back real,
    draw_lay real
);

status可以是" ACTIVE"或者" SUSPENDED",我只想保持" ACTIVE"市场。我也有兴趣看看最初绘制的游戏,然后以平局结束,即。 draw_back最初的价值低于away_backhome_back,然后最终的draw_back价格低于第一个draw_back价格。

为了更好地说明这一点,请查询查询应该找到的特定游戏的日志:

ACTIVE|2013-06-27 13:13:17.577877|109868503|Home Utd v Tanjong Pagar Utd|49905.54|6.2|6.4|9.6|11.0|1.33|1.34
ACTIVE|2013-06-27 13:14:18.413846|109868503|Home Utd v Tanjong Pagar Utd|49905.54|6.0|6.6|11.5|13.0|1.31|1.32
ACTIVE|2013-06-27 13:15:19.320099|109868503|Home Utd v Tanjong Pagar Utd|65377.29|7.0|7.4|14.0|16.5|1.22|1.25
ACTIVE|2013-06-27 13:16:20.180560|109868503|Home Utd v Tanjong Pagar Utd|65377.29|9.6|10.0|14.5|17.5|1.2|1.22
ACTIVE|2013-06-27 13:17:21.093332|109868503|Home Utd v Tanjong Pagar Utd|65377.29|10.5|30.0|15.5|40.0|1.15|1.17
ACTIVE|2013-06-27 13:18:21.912865|109868503|Home Utd v Tanjong Pagar Utd|65377.29|13.5|19.5|16.5|26.0|1.11|1.12

我想要一个选择所有类似游戏的查询,并检查他们最有可能在平局中完成。理想情况下,它还可以通过计算完成抽奖结果的数字来计算这样的游戏的奖金/亏损,而不是作为抽奖完成的数字。

到目前为止,我的查询是

select *
from in_play
where status="ACTIVE"
    and draw_back < away_back
    and draw_back < home_back;

但我没有太多的SQL经验。

对于这篇文章的篇幅感到抱歉,我希望这是有道理的。

1 个答案:

答案 0 :(得分:1)

我相信这应该做到(虽然它会缓慢而且效率低下;我可能通过查找初始或最终案例,然后在那里工作,主要通过代码解决它):

select * from in_play a, in_play b where a.status='ACTIVE'
and a.draw_back < a.away_back and a.draw_back < a.home_back
and b.marketID = a.marketID
and b.draw_back < a.draw_back
and a.date = (select min(c.date) from in_play c where c.marketID = a.marketID)
and b.date = (select max(d.date) from in_play d where d.marketID = a.marketID)