我在MYSQL查询中的自连接中遇到了问题。请检查表格并查询

我在MYSQL查询中的自连接中遇到了问题。请检查表格并查询,mysql,self-join,Mysql,Self Join,请通过以下查询创建表: CREATE TABLE `trade` ( `order` VARCHAR(10) DEFAULT NULL, `positionid` INT(11) DEFAULT NULL, `time` DATETIME DEFAULT NULL, `volume` FLOAT NOT NULL ) engine=innodb

请通过以下查询创建表:

 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; 
 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`; 
插入查询

 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); 
我尝试了以下问题:

 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; 
 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`; 
表:

错误输出:

此图显示重复数据:

所需输出:

此图将显示所需的输出:

说明:

当我们打开交易时,它将存储到交易表中。之后,当我们结束交易时,它将以不同的时间和数量进行另一次录入,如果交易部分结束,那么数量将不同,否则完全结束交易。
在这里,第一个条目将打开存储为时间的\u时间,第二个条目将关闭\u时间。那么,如何将两个或多个记录转换为具有打开时间和关闭时间的单个记录?

将时间条件更改为:

-编辑

所以b实例对于期初订单是等价的,j实例对于收盘订单是等价的

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;

我看不出你在哪里计算体积列。看起来你需要一个有COUNT的群组。谢谢@codeLover的回答。但在这里,这种条件不适用于部分关闭的交易。当positionid超过两条记录时,请查看所需输出和实际表格。请立即检查条件。再次感谢回复。但是它跳过了42580订单。你能看一下你的数据吗,因为如果它适用于其他两个订单,那么它也适用于这个订单。。