У меня много трудностей, пытаясь реализовать этот конкретный запрос как относительный слабый новичок с mysql и синтаксисом.Как объединить эти два запроса в 1, чтобы соответствовать условию?
У меня есть 3 таблицы
- SYMBOLS_LIST (содержит список символов акций) (ключ = СИМВОЛ)
- T50DMA (содержит 50-дневной скользящей средней, уже вычисленного для каждого символа каждый день) (содержит ДАТА, FIFTY_DAY_MA столбцы)
- T200DMA (содержит 200 дневная скользящая средняя уже рассчитывается для каждого символа каждый день) (содержит DATE, TWO_HUNDRED_DAY_MA столбцы)
Я пытаюсь определить список символов, в которых цена 50DMA имеет кроссовер 200DMA для сегодняшней даты. Скользящие средние уже были рассчитаны и сохранены в соответствующей таблице, поэтому расчет скользящего среднего не требуется.
Для обнаружения кроссовера, я пытаюсь выполнить следующие действия, чтобы получить список символов, где:
Today's 50DMA t1 > Today's 200DMA t2
AND
Yesterday's 50DMA t1 <= Yesterday's 200DMA t2
Самое большее, что я был в состоянии писать состоит из двух отдельных запросов, которые дают мне список первого и второго, но я не уверен, как их сочетать, чтобы выполнить условие, написанное выше.
Как это можно записать для удовлетворения обоих условий в 1 заявлении? Большое вам спасибо за любую помощь, которую вы можете предложить.
Дополнительная Edit:
Вот два запроса, которые я смог построить:
**Today's 50DMA t1 > Today's 200DMA t2**
select t1.SYMBOL from T50DMA t1, T200DMA t2 where
t1.SYMBOL IN (SELECT SYMBOL from SYMBOLS_LIST) AND
t1.SYMBOL=t2.SYMBOL AND
(t1.DATE='2015-12-10' AND t2.DATE='2015-12-10' AND
t1.FIFTY_DAY_MOVING_AVERAGE > t2.TWO_HUNDRED_DAY_MOVING_AVERAGE) GROUP BY
t1.SYMBOL, t1.DATE;
**Yesterday's 50DMA t1 <= Yesterday's 200DMA t2**
select t1.SYMBOL from T50DMA t1, T200DMA t2 where
t1.SYMBOL IN (SELECT SYMBOL from SYMBOLS_LIST) AND
t1.SYMBOL=t2.SYMBOL AND
(t1.DATE='2015-12-10' - INTERVAL 1 DAY AND t2.DATE='2015-12-10' - INTERVAL 1
DAY AND
t1.FIFTY_DAY_MOVING_AVERAGE <= t2.TWO_HUNDRED_DAY_MOVING_AVERAGE) GROUP BY
t1.SYMBOL, t1.DATE;
Я просто не знаю, как объединить их, чтобы сделать оба условия, действующие в 1 заявлении есть только те, символы, соответствующие условиям. Спасибо за вашу помощь в этом.
12/14/2015 Редактировать: Я пробовал этот запрос, но он не возвращает никаких результатов. Если я прокомментирую любую строку и запустил ее, я получаю результаты для одного или другого запроса, но ничего, когда оба определены. Что не так с запросом? Я застрял.
select t1.SYMBOL
from T50DMA t1, T200DMA t2
where t1.SYMBOL IN (SELECT SYMBOL from SYMBOLS_LIST)
AND ((t1.SYMBOL=t2.SYMBOL) AND (t1.DATE='2015-12-10' AND t2.DATE='2015-12-10') AND (t1.FIFTY_DAY_MOVING_AVERAGE > t2.TWO_HUNDRED_DAY_MOVING_AVERAGE))
AND ((t1.SYMBOL=t2.SYMBOL) AND (t1.DATE='2015-12-09' AND t2.DATE='2015-12-09') AND (t1.FIFTY_DAY_MOVING_AVERAGE <= t2.TWO_HUNDRED_DAY_MOVING_AVERAGE));
В ответ на Dijkgraaf:
Предполагая, что условие 1 для сегодняшних 50 DMA> сегодняшних 200 DMA (И) 50 DMA < = 200 DMA Вчерашнее, я бы ожидал увидеть только список Вчерашний символы (или с сегодняшним днем), указывающих, что кроссовер произошел, такие как:
'2015-12-14 00:00:00', 'AAON'
'2015-12-14 00:00:00', 'ADGE'
'2015-12-14 00:00:00', 'BLK'
'2015-12-14 00:00:00', 'CRY'
Я взял данные со вчерашнего дня (2015-12-14) и по сравнению с предыдущим торговым днем (2015-12-11) по проверка данные в Excel, сделав
AND(IF(today's 50DMA>Today's 200 DMA,1,0),IF(Yesterday's 50 DMA<=Yesterday's 200DMA,1,0)) 1=True, 0=False
Here are a few entries of data:
TODAY'S DATE SYMBOL 50DMA 200DMA YESTERDAY DATE SYMBOL 50DMA 200DMA RESULT
12/14/2015 0:00 ADGE 0.4991 0.498 12/11/2015 0:00 ADGE 0.4958 0.4979 TRUE
12/14/2015 0:00 CRY 10.432 10.429 12/11/2015 0:00 CRY 10.426 10.429 TRUE
For ADGE, it would be:
(0.4991 > 0.498) AND (0.4958 <= 0.4979) = true 50 DMA crossed over 200 DMA
For CRY, it would be:
(10.432 > 10.429) AND (10.426 <= 10.429) = true 50 DMA crossed over 200 DMA
По какой-то причине я не понимаю, почему запрос не вернется с любыми символами. Возможно, я не реализовал его правильно, или я как-то смущаю его по датам?
select t1.SYMBOL
from T50DMA t1, T200DMA t2
where t1.SYMBOL IN (SELECT SYMBOL from SYMBOLS_LIST)
AND ((t1.SYMBOL=t2.SYMBOL) AND (t1.DATE='2015-12-14' AND t2.DATE='2015-12-14') AND (t1.FIFTY_DAY_MOVING_AVERAGE > t2.TWO_HUNDRED_DAY_MOVING_AVERAGE))
AND ((t1.SYMBOL=t2.SYMBOL) AND (t1.DATE='2015-12-11' AND t2.DATE='2015-12-11') AND (t1.FIFTY_DAY_MOVING_AVERAGE <= t2.TWO_HUNDRED_DAY_MOVING_AVERAGE));
Дополнительный вопрос (2015-03-17):
На стороне вопрос, есть ли способ, чтобы определить (по делу или если заявление), что если интервал - 1 день выпадает на в воскресенье или субботу, чтобы выбрать, что в прошлую пятницу? В некоторых случаях даже в пятницу (например, в Страстную пятницу) рынок будет закрыт, в котором не будет производиться никаких данных. У меня есть таблица поиска для каждой недели (дата начала и дата окончания) фактического диапазона рыночных дат за каждую неделю в таблице под названием «WEEKLY_LOOKUP». Например, если в пятницу рынок закрыт, таблица будет указывать, что дата окончания будет для «четверга» вместо пятницы.
Для обработки двух корпусов: 1) Если интервал - 1 день в субботу или воскресенье, следующий рабочий день - пятница. 2) Но если пятница - нерыночный день, ее нужно будет установить в предыдущий четверг. Есть ли способ ссылаться на WEEKLY_LOOKUP (КОНЕЦ ДАТА) в таблице? Например, в пятницу 2015-03-25 рынок закрыт.
WEEKLY_LOOKUP
START_DATE END_DATE
'2016-03-21 00:00:00', '2016-03-24 00:00:00'
Тогда это будет производить, например, день ток 2016-03-28 и предыдущий день, чтобы сравнить из 2016-03-24.
Есть ли способ реализовать в том же запросе, или это сделает его слишком сложным для обработки? Спасибо!!
Значит, вы хотите, чтобы символы отображались в обоих вариантах? Дайте некоторые примеры данных и то, что вы ожидаете от результата, чтобы проиллюстрировать ваш вопрос. – Dijkgraaf
Hi Dijkgraff, я предоставил ответ с дополнительной информацией. спасибо, что посмотрели. – livefire
Спасибо Dijkgraaf !! Я подтвержу это против результатов закрытия дня и дам вам знать результат! Я запустил это в предыдущие дни, когда создаваемые вами запросы работали над предоставлением списка символов. Основываясь на приведенных выше примерах для 2015-12-14, я видел их в списке. Я приведу подтверждение позже этим вечером, когда я получу новые данные и смогу сравнить их с другим источником.Конечно, я был совершенно не в своем первоначальном запросе и не смог бы решить это без вашей щедрости и опыта! Спасибо, сэр! Будем писать позже. – livefire