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
andprice_open
with tableprice
- Then, get the +-2 days for each
price_datetime
(follows with theprice_open
) - Then, count whether any of the
price.price_open
within that 5 days exceeds 5%, 10% or 15% of the "base price"
- Match the
Conditions:
- If any of the
price.price_open
within that 5 days equals/exceeds 15% of the "base price", then fill incomment.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 incomment.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 incomment.threshold
with "Y" - If any of the
price.price_open
within that 5 days is less 5%, then fill incomment.threshold
with "C" - For empty values in columns
comment.price_datetime
andcomment.price_open
, we will leave it NULL as it is, thus NULL forcomment.threshold
as well.
- If any of the
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 |
+------------+---------------------+--------+---------+-----------+---------------------+------------+-----------+
Aucun commentaire:
Enregistrer un commentaire