Calculations involving thresholds between two tables
0
votes
1
answer
227
views
I have a table
comment
and a table price
like below. The key columns in both tables are ticker_id
, price_datetime
and price_open
. The last column threshold
in table comment
(which currently NULL) is something that I need to fill in with after some calculation queries (if this is achievable).
comment
table:
+------------+---------------------+--------+---------+-----------+---------------------+------------+-----------+
| comment_id | comment_datetime | author | comment | ticker_id | price_datetime | price_open | threshold |
+------------+---------------------+--------+---------+-----------+---------------------+------------+-----------+
| 1 | 2014-09-22 06:05:00 | A1 | C1 | 343 | 2014-09-22 08:00:00 | 53.25000 | |
+------------+---------------------+--------+---------+-----------+---------------------+------------+-----------+
| 2 | 2014-09-22 06:39:00 | A2 | C2 | 1 | 2014-09-22 08:00:00 | 62.00000 | |
+------------+---------------------+--------+---------+-----------+---------------------+------------+-----------+
| 3 | 2014-09-22 08:13:00 | A3 | C3 | 178 | 2014-09-22 08:13:00 | 5.15000 | |
+------------+---------------------+--------+---------+-----------+---------------------+------------+-----------+
price
table:
+----------+---------------------+------------+-----------+
| price_id | price_datetime | price_open | ticker_id |
+----------+---------------------+------------+-----------+
| 1 | 2014-09-22 08:01:00 | 62.00000 | 1 |
+----------+---------------------+------------+-----------+
| 2 | 2014-09-22 08:02:00 | 62.00000 | 1 |
+----------+---------------------+------------+-----------+
| 3 | 2014-09-22 08:03:00 | 62.00000 | 1 |
+----------+---------------------+------------+-----------+
In each row of table comment
, price_open
will be used as "base price".
- For each row of table comment
- Match the ticker_id
, price_datetime
and price_open
with table price
- Then, get the +-2 days for each price_datetime
(follows with the price_open
)
- Then, count whether any of the price.price_open
within that 5 days exceeds 5%, 10% or 15% of the "base price"
- Conditions:
- If any of the price.price_open
within that 5 days equals/exceeds 15% of the "base price", then fill in comment.threshold
with "R"
- If any of the price.price_open
within that 5 days equals/exceeds 10% of the "base price" (but less than 15%), then fill in comment.threshold
with "A"
- If any of the price.price_open
within that 5 days equals/exceeds 5% of the "base price" (but less than 10%), then fill in comment.threshold
with "Y"
- If any of the price.price_open
within that 5 days is less 5%, then fill in comment.threshold
with "C"
- For empty values in columns comment.price_datetime
and comment.price_open
, we will leave it NULL as it is, thus NULL for comment.threshold
as well.
Is the above going to be achievable in MySQL using JOIN? I am trying to learn about JOIN right now, unfortunately it seems way too complicated to me, I have no clue about the query that I should execute as I just started learning MySQL.
I've tried explaining my question in details, but if there's anything unclear, kindly let me know.
Any help would be much appreciated. Thank you.
**EDIT** (as requested by Verace):
CREATE
statements:
CREATE TABLE comment
(
comment_id
int(11) NOT NULL AUTO_INCREMENT,
comment_datetime
datetime NOT NULL,
author
varchar(25) NOT NULL,
title
varchar(250) NOT NULL,
comment
text NOT NULL,
ticker_id
int(11) NOT NULL,
price_datetime
datetime DEFAULT NULL,
price_open
decimal(12,5) DEFAULT NULL,
threshold
varchar(10) DEFAULT NULL,
PRIMARY KEY (comment_id
)
)
CREATE TABLE price
(
price_id
int(11) NOT NULL AUTO_INCREMENT,
price_open
decimal(12,5) DEFAULT NULL,
ticker_id
int(11) NOT NULL,
price_datetime
datetime NOT NULL,
PRIMARY KEY (price_id
),
UNIQUE KEY datetime
(price_datetime
,ticker_id
)
)
Expected result:
+------------+---------------------+--------+---------+-----------+---------------------+------------+-----------+
| comment_id | comment_datetime | author | comment | ticker_id | price_datetime | price_open | threshold |
+------------+---------------------+--------+---------+-----------+---------------------+------------+-----------+
| 1 | 2014-09-22 06:05:00 | A1 | C1 | 343 | 2014-09-22 08:00:00 | 53.25000 | C |
+------------+---------------------+--------+---------+-----------+---------------------+------------+-----------+
| 2 | 2014-09-22 06:39:00 | A2 | C2 | 1 | 2014-09-22 08:00:00 | 62.00000 | Y |
+------------+---------------------+--------+---------+-----------+---------------------+------------+-----------+
| 3 | 2014-09-22 08:13:00 | A3 | C3 | 178 | 2014-09-22 08:13:00 | 5.15000 | R |
+------------+---------------------+--------+---------+-----------+---------------------+------------+-----------+
Asked by merv
(153 rep)
Jan 28, 2015, 11:38 PM
Last activity: Oct 13, 2021, 12:03 AM
Last activity: Oct 13, 2021, 12:03 AM