Я пытаюсь вычислить весы для диаграммы, которую мне нужно создать, однако я достиг проблемы, когда данные не упорядочены после даты, и если я закажу ее по дате, она будет сделайте это после того, как я рассчитал баланс, и поэтому баланс по-прежнему не соответствует действительности. Как я могу рассчитать баланс после того, как запрос был заказан к этой дате?Закажите sql-запрос перед выполнением оператора case
http://sqlfiddle.com/#!2/374b9/6
тестовых данных:
CREATE TABLE betting
(
id int auto_increment primary key,
date DATETIME,
odds varchar(20),
status varchar(30)
);
INSERT INTO betting
(id, date, odds, status)
VALUES
('1', '2015-02-08 20:27:44', '1.70', 'wrong'),
('2', '2015-02-08 13:22:17', '3.05', 'correct'),
('3', '2015-02-09 16:40:45', '2.20', 'correct'),
('4', '2015-02-10 13:58:24', '1.33', 'correct'),
('5', '2015-02-12 11:37:51', '1.35', 'correct'),
('6', '2015-02-12 10:24:13', '1.38', 'correct');
SET @balance = 0;
SELECT date, odds, status, CASE WHEN status = 'wrong'
THEN @balance := @balance -100
ELSE @balance := @balance + (odds * 100 - 100)
END as balance
from betting
Желаемая баланс
205
105
225
258
293
331
я создал SQLFiddle для упрощая.
ДОПОЛНИТЕЛЬНАЯ ИНФОРМАЦИЯ
Поскольку существует некоторая путаница, я решил добавить реальный запрос, который немного больше из-за того, что это WordPress.
SET @balance = 0;
SELECT odds.meta_value AS odds, stat.meta_value AS stats, posts.post_date,
CASE WHEN stat.meta_value = 'wrong'
THEN @balance := @balance -100
ELSE @balance := @balance + (odds.meta_value * 100 - 100)
END as balance
FROM wp_t3a673_posts posts
LEFT JOIN wp_t3a673_postmeta stat ON posts.ID = stat.post_id
AND stat.meta_key = 'status'
LEFT JOIN wp_t3a673_postmeta odds ON posts.ID = odds.post_id
AND odds.meta_key = 'odds'
LEFT JOIN wp_t3a673_term_relationships tr ON posts.ID = tr.object_id
LEFT JOIN wp_t3a673_term_taxonomy t ON tr.term_taxonomy_id = t.term_taxonomy_id
WHERE (
stat.meta_value = 'correct'
OR stat.meta_value = 'wrong'
)
AND posts.post_status = 'publish'
AND t.taxonomy = 'category'
AND (
t.term_id =4
OR t.term_id =5
OR t.term_id =6
)
ORDER BY posts.post_date
В результате этого ниже. Здесь вы можете ясно видеть, что первый баланс не является правильным: оно должно быть -100, но возвращает 105, и это связано с тем, что он заказывает после баланс рассчитывается следующим образом:
И если я просто -100 в любом случае, если это неправильно или правильно, вы даже можете ясно видеть проблему
ли идентификатор 2 не должна быть после того, как идентификатор 1? –
+1 для обеспечения скрипки сразу. Но каков был бы желаемый результат здесь, можете ли вы это показать? Я попытался поставить внешний SELECT вокруг нашего запроса и упорядочить по дате в этом, но это дает разные значения для баланса. Можете ли вы объяснить еще, что такое значение должно представлять? – CBroe
первые две строки вашего снимка противоположны тем, что находятся в вашем наборе данных. 1.70 в 13:22 и 3.05 в 20:27. Какой из них мы должны использовать? – Adam