You are beyond the realm of SQL. What you would need for something like
this is a dynamically-generated case statement that would apply different
multipliers based on the date of the quote you are trying to adjust. For
those quote values that exist BEFORE multiple splits you must adjust by the
PRODUCT of those splits to achieve your adjusted split.
There is currently no PRODUCT() keyword that is analogous to the SUM()
keyword or you would be able to get your historical multipliers through
sub-selects.
It may be possible to write a UDF that takes the stock symbol and a target
date and computes the adjustment ratio for that date (but I haven't built
one yet so I don't know for sure)
Yours,
Shawn Green
Database Administrator
Unimin Corporation - Spruce Pine
<[EMAIL PROTECTED]
com> To: <[EMAIL PROTECTED]>
Sent by: "Fyodor cc:
Golos" Fax to:
<[EMAIL PROTECTED] Subject: need help with a complicated
join
com>
05/25/2004 03:07
PM
I am trying to come up with a query that takes two tables, one with
non-split-adjusted historical stock prices, and one with information on
splits, for instance:
CREATE TABLE quotes (
symbol VARCHAR(127) NOT NULL,
date DATE NOT NULL,
quote FLOAT NOT NULL,
PRIMARY KEY (symbol, date),
INDEX (date),
);
INSERT quotes VALUES ("A", "2004-01-01", 3);
INSERT quotes VALUES ("A", "2004-01-02", 3);
INSERT quotes VALUES ("A", "2004-01-03", 3);
INSERT quotes VALUES ("A", "2004-01-04", 3);
INSERT quotes VALUES ("A", "2004-01-05", 2);
INSERT quotes VALUES ("A", "2004-01-06", 2);
INSERT quotes VALUES ("A", "2004-01-07", 2);
INSERT quotes VALUES ("A", "2004-01-08", 1);
INSERT quotes VALUES ("A", "2004-01-09", 1);
CREATE TABLE splits (
symbol VARCHAR(127) NOT NULL,
date DATE NOT NULL,
split_from INT UNSIGNED NOT NULL,
split_to INT UNSIGNED NOT NULL,
PRIMARY KEY (symbol, date),
);
INSERT splits VALUES ("A", "2004-01-05", 2, 3);
INSERT splits VALUES ("A", "2004-01-08", 1, 2);
I need to be able to pull out split-adjusted quotes, like this:
SELECT symbol, date, ...some magic... FROM quotes WHERE symbol = "A" ORDER
BY date;
+--------+------------+-------+----------------+
| symbol | date | quote | adjusted_quote |
+--------+------------+-------+----------------+
| A | 2004-01-01 | 3 | 1 |
| A | 2004-01-02 | 3 | 1 |
| A | 2004-01-03 | 3 | 1 |
| A | 2004-01-04 | 3 | 1 |
| A | 2004-01-05 | 2 | 1 |
| A | 2004-01-06 | 2 | 1 |
| A | 2004-01-07 | 2 | 1 |
| A | 2004-01-08 | 1 | 1 |
| A | 2004-01-09 | 1 | 1 |
+--------+------------+-------+----------------+
Split-adjusting means that on a split date all previous prices are
multiplied by "split_from/split_to" ratio. In my example two splits took
place, one on 2004-01-05, which multiplied all previous prices by 2/3 and
another one on 2004-01-08, which multiplied all previous prices (including
those already affected by first split) by 1/2.
Any help would be appreciated.
---
Fyodor Golos
Stockworm, Inc.
--
MySQL General Mailing List
For list archives: http://lists.mysql.com/mysql
To unsubscribe: http://lists.mysql.com/[EMAIL PROTECTED]
--
MySQL General Mailing List
For list archives: http://lists.mysql.com/mysql
To unsubscribe: http://lists.mysql.com/[EMAIL PROTECTED]