当前位置: 首页 > 知识库问答 >
问题:

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

鲁城
2023-03-14

请通过以下查询创建表:

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

表:

错误输出:

此图像显示重复数据:

所需输出:

此图将显示所需的输出:

描述:

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

共有2个答案

郎鸿雪
2023-03-14

将时间条件更改为:

--编辑

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就相当于收盘订单的实例

向修谨
2023-03-14

检查这个

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;
 类似资料:
  • 本文向大家介绍详解MySql基本查询、连接查询、子查询、正则表达查询,包括了详解MySql基本查询、连接查询、子查询、正则表达查询的使用技巧和注意事项,需要的朋友参考一下 查询数据指从数据库中获取所需要的数据。查询数据是数据库操作中最常用,也是最重要的操作。用户可以根据自己对数据的需求,使用不同的查询方式。通过不同的查询方式,可以获得不同的数据。MySQL中是使用SELECT语句来查询数据的。在这

  • 我有这个问题。我希望它从内容表中选择4个条目,并按如下方式对条目进行排序: > 选择最近的条目。它表示按日期排序(mysql datetime)DESC,id DESC。 从这4个选定项中,按likes(mysql INT)DESC排序 运行查询时,它返回错误的结果。它选择与此条件匹配的条目,其中主题='id'和活动='1'。它按likes DESC对条目进行排序,但忽略了这个条件,即按日期DES

  • 问题内容: 遇到了一些严重的问题,无法解决如何针对我的情况建立适当的查询。.可以肯定的是,这取决于正确地连接表,但是经过大量的谷歌搜索之后,我似乎无法弄清楚… 我有下表。 和… 和… 希望我能够正确解释这一点。.我在Main中有一堆记录,我需要从中获取信息。.我需要能够对WhenDate和TypeID进行过滤。我还需要从链接到StatusID的状态表中获取StatusText。 问题: 次要表链接

  • 数据库有一个学生表t_student有两个字段 id, name 我想找出name相同的所有数据的id,并根据name排序,好做对比。如 id name 1 张三 2 李四 3 张三 4 王五 5 王五 我想找出的数据是 id name 1 张三 3 张三 4 王五 5 王五 写下的sql如下 虽然能得到想要的数据,但是查询的速度很慢。要6s左右。 后面发现这种写法,在数据量大时,查询时间能缩短1

  • 本文向大家介绍详解MySQL中的分组查询与连接查询语句,包括了详解MySQL中的分组查询与连接查询语句的使用技巧和注意事项,需要的朋友参考一下 分组查询 group by group by 属性名 [having 条件表达式][ with rollup] “属性名 ”指按照该字段值进行分组;“having 条件表达式 ”用来限制分组后的显示,满足条件的结果将被显示;with rollup 将会在所

  • 我正在使用hibernate为一个项目连接到我的数据库。 我想有一个查询,从我的数据库中获得产品与特定语言的描述和名称。我拥有的参数是该语言的简称,因此首先我必须获得该语言的id,然后获得所需语言的文本。 我尝试了下面的hql查询,没有成功。