Я получаю проблему в SELF JOIN в запросе MYSQL. Пожалуйста, проверьте таблицу и запрос - PullRequest
0 голосов
/ 10 сентября 2018

Пожалуйста, создайте таблицу по следующему запросу:

 CREATE TABLE `trade` 
      ( 
         `order`      VARCHAR(10) DEFAULT NULL, 
         `positionid` INT(11) DEFAULT NULL, 
         `time`       DATETIME DEFAULT NULL, 
         `volume`     FLOAT NOT NULL 
      ) 
    engine=innodb 
    DEFAULT charset=latin1; 

Вставить запрос

 INSERT INTO `trade` 
                (`order`, 
                 `positionid`, 
                 `time`, 
                 `volume`) 
    VALUES      ('42556', 
                 1111, 
                 '2018-08-15 07:27:44', 
                 2), 
                ('42560', 
                 1111, 
                 '2018-08-18 08:32:47', 
                 2), 
                ('42564', 
                 1235, 
                 '2018-08-21 07:10:12', 
                 5), 
                ('42572', 
                 1235, 
                 '2018-08-23 17:20:26', 
                 2), 
                ('42580', 
                 1235, 
                 '2018-08-23 17:03:30', 
                 3); 

Я пробовал ниже запрос:

 SELECT b.`order` AS `TICKET`, 
           b.`time`  AS `OPEN_TIME`, 
           j.`time`  AS `CLOSE_TIME` 
    FROM   trade AS b 
           LEFT JOIN trade AS j 
                  ON b.`positionid` = j.`positionid` 
    WHERE  b.`time` != j.`time`; 

Таблица:

enter image description here

Ошибка вывода:

Это изображение показывает повторяющиеся данные:

enter image description here

Требуемый выход:

На этом изображении будет показан требуемый результат:

enter image description here

Описание:

Когда мы открываем торговлю, она сохраняется в таблице торгов. После этого, когда мы закроем сделку, она сделает еще одну запись с другим временем и объемом (если сделка закроется частично, тогда объем будет другим, в противном случае сделка будет закрыта полностью). Здесь первая запись будет OPEN_TIME, которая хранится как время, а вторая будет CLOSE_TIME. Так как же преобразовать две или более записи в одну запись с помощью OPEN_TIME и CLOSE_TIME?

Ответы [ 2 ]

0 голосов
/ 10 сентября 2018

Проверьте это

SELECT j.`order` AS `TICKET`, 
b.`positionid` AS `PositionID`,
   b.`time`  AS `OPEN_TIME`, 
   j.`time`  AS `CLOSE_TIME` ,
   j.`volume` AS `Volume`
FROM   trade AS b 
   INNER JOIN trade AS j 
          ON b.`positionid` = j.`positionid` 
where b.time = (select min(time) from trade as c1 where b.positionid=c1.positionid)
AND b.time!=j.time;
0 голосов
/ 10 сентября 2018

Измените условие времени на:

- Изменить

where j.time = (select max(time) from test_query where positionid = j.positionid) 
and b.time = (select min(time) from test_query where positionid = b.positionid) 

, чтобы экземпляр b стал эквивалентным для открытия ордеров, а j - экземпляромдля закрытия ордеров

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