2013-06-27 3 views
0

Недавно я написал код, который регистрирует данные с веб-сайта обмена ставок. Код создает простую базу данных SQLite3 с одной таблицей. Эта база данных хранит коэффициенты для игр, поскольку игры идут в игре.Требуется справиться с сложным SQL-запросом

.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» или «ПОДВЕСНЫМ», я только хочу, чтобы «активные» рынков. Я также заинтересован в том, чтобы смотреть на игры, которые рисуются изначально, а затем заканчиваются ничьей, т.е. draw_back имеет более низкое значение, чем away_back, и home_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.

Извините за длину этого сообщения, я надеюсь, что это имеет смысл.

+3

I Подождите, вы должны использовать одиночные, а не двойные кавычки вокруг строкового литерала - то есть ... 'WHERE status = 'ACTIVE'' ... – nurdglaw

ответ

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) 
+0

Спасибо, это отличное начало! Я думаю, что я собираюсь пойти с вашим предложением, я только начал писать сценарий Python, чтобы подключиться к базе данных и обработать его с помощью этого. – James