I have a table with football odds that looks like below:
fixture_id | H_odds | D_odds | A_odds | ev_tstamp | updated |
---|---|---|---|---|---|
120000 | 1.40 | 1.50 | 1.60 | 132000 | 12 |
120000 | 1.20 | 1.20 | 1.20 | 132000 | 11 |
120000 | 1.20 | 1.20 | 1.20 | 132000 | 10 |
120000 | 1.10 | 1.20 | 1.20 | 132000 | 9 |
180000 | 1.20 | 1.30 | 1.60 | 132000 | 12 |
180000 | 1.10 | 1.20 | 1.20 | 132000 | 11 |
180000 | 1.50 | 1.80 | 1.50 | 132000 | 10 |
You can do this by joining the table on itself:
select
t_max.*,
(t_max.H_odds - t_min.H_odds) as dif_h,
(t_max.D_odds - t_min.D_odds) as dif_d,
(t_max.A_odds - t_min.A_odds) as dif_a
from
(
select
fixture_id,
min(updated) min_updated,
max(updated) max_updated
from
test
group by
fixture_id
) as t1
join test as t_min on (t_min.fixture_id = t1.fixture_id and t_min.updated = t1.min_updated)
join test as t_max on (t_max.fixture_id = t1.fixture_id and t_max.updated = t1.max_updated)
Working example.
In MySQL >= 8 there may be a solution using window-functions, but im not too sure about that since the fields you need can not be fetched by an aggregate function itself, they are just identified by an aggregate (namelymin
andmax
) + fixture_id.
You'd need something like this:
SELECT
MIN(updated) over (partition by fixture_id)
...
This get max updated for all grouped 'fixture_id' (but you dont want 'min(updated)', you want 'H_odds' etc. of the row having 'min(updated) AND fixture_id = "fixture_id of max(updated) with same fixture_id') - which, please correct me if im wrong, does not exist. But since you dont use MySql >= 8 anyways this is not an option.
And please get unique ids :)
You need to index your table:
// recommended if you plan to narrow down your results by this fields - which i assume
create index t_f on test (fixture_id);
create index t_u on test (updated);
// MUST HAVE
create unique index t_fu on test (fixture_id, updated);
If you dont do so, there will be temptables on your filesystem - (very very slow)
Working example.
Update: A rather unpleasant MySQL >= 8 window-function version (using filesort - DO NOT USE).
Our community is visited by hundreds of web development professionals every day. Ask your question and get a quick answer for free.
Find the answer in similar questions on our website.
Do you know the answer to this question? Write a quick response to it. With your help, we will make our community stronger.
PHP (from the English Hypertext Preprocessor - hypertext preprocessor) is a scripting programming language for developing web applications. Supported by most hosting providers, it is one of the most popular tools for creating dynamic websites.
The PHP scripting language has gained wide popularity due to its processing speed, simplicity, cross-platform, functionality and distribution of source codes under its own license.
https://www.php.net/
DBMS is a database management system. It is designed to change, search, add and delete information in the database. There are many DBMSs designed for similar purposes with different features. One of the most popular is MySQL.
It is a software tool designed to work with relational SQL databases. It is easy to learn even for site owners who are not professional programmers or administrators. MySQL DBMS also allows you to export and import data, which is convenient when moving large amounts of information.
https://www.mysql.com/
Welcome to the Q&A site for web developers. Here you can ask a question about the problem you are facing and get answers from other experts. We have created a user-friendly interface so that you can quickly and free of charge ask a question about a web programming problem. We also invite other experts to join our community and help other members who ask questions. In addition, you can use our search for questions with a solution.
Ask about the real problem you are facing. Describe in detail what you are doing and what you want to achieve.
Our goal is to create a strong community in which everyone will support each other. If you find a question and know the answer to it, help others with your knowledge.