Показать строки при первом появлении каждого повторного значения - PullRequest
0 голосов
/ 22 апреля 2020

В настоящее время я строю торговую программу. Мне нужно, чтобы результат возвращался, когда сигнал попадает в следующие 0 или 1.

Столбец сигнала имеет только три значения: «0», «1» или «». 1 обозначает сигнал на покупку, а 0 обозначает сигнал на продажу. "" просто означает ожидание, пока сигнал не будет достигнут.

Иногда может быть несколько 0 или 1, возвращенных в строке, но мне нужно только найти первую строку, так как это будет время для входа или вне.

Итак, мой стол выглядит так.

id  coinType  signal        date
==========================================
1     A         0      2020-04-18 05:45:05
2     A                2020-04-18 05:46:05
3     A         1      2020-04-18 05:47:05
4     A                2020-04-18 05:48:05
5     A                2020-04-18 05:49:05
6     A         0      2020-04-18 05:50:05
7     A         1      2020-04-18 05:51:05
8     A         1      2020-04-18 05:52:05
9     A                2020-04-18 05:53:05
10    A         0      2020-04-18 05:54:05

Я пробовал следующий код, но, похоже, он не возвращает правильный результат.

SELECT * FROM table c WHERE `coinType`='A' and `signal` NOT IN ( SELECT `signal` FROM table WHERE id = (SELECT MAX(id) FROM table WHERE `signal`!='' and id < c.id and `coinType` = c.`coinType`) ) ORDER BY id

Возвращенный результат должен выглядеть следующим образом

id   coinType   signal        date
==============================================
1      A          0       2020-04-18 05:45:05
3      A          1       2020-04-18 05:47:05
6      A          0       2020-04-18 05:50:05
7      A          1       2020-04-18 05:51:05
10     A          0       2020-04-18 05:54:05

1 Ответ

0 голосов
/ 22 апреля 2020
SELECT 
  MIN(id), 
  signal, 
  MIN(date) 
FROM 
  table 
WHERE 
  coinType = 'A'
GROUP BY
  signal
ORDER BY
  id DESC;

Будет ли что-то подобное делать свое дело? Вы также можете добавить MIN(cointype) к выбору, так как в любом случае вы фильтруете по типу монеты, или вы можете просто добавить его к части GROUP BY после типа монеты.

Надеюсь, теперь я правильно понял вопрос :) В основном это будет группировать по типам сигналов для этой монеты и даст вам минимальный идентификатор и дату.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...