我在 MYSQL 查询中的 SELF JOIN 中遇到了问题。请检查table并查询
I am getting the issue in SELF JOIN in MYSQL query. Please check the table and query
请通过以下查询创建 table:
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`;
Table :
错误输出:
此图显示重复数据:
要求输出:
此图像将显示所需的输出:
描述:
当我们打开交易时,它会存储以进行交易table。之后,当我们关闭交易时,它将以不同的时间和数量进行另一个输入(如果交易将部分关闭,则交易量将不同,否则将完全关闭交易)。
这里第一个条目将 OPEN_TIME 存储为时间,第二个条目将 CLOSE_TIME。那么如何使用OPEN_TIME和CLOSE_TIME将两条或多条记录转换为一条记录呢?
将时间条件更改为:
--编辑
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
就变成关闭订单的实例
检查这个
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;
请通过以下查询创建 table:
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`;
Table :
错误输出:
此图显示重复数据:
要求输出:
此图像将显示所需的输出:
描述:
当我们打开交易时,它会存储以进行交易table。之后,当我们关闭交易时,它将以不同的时间和数量进行另一个输入(如果交易将部分关闭,则交易量将不同,否则将完全关闭交易)。 这里第一个条目将 OPEN_TIME 存储为时间,第二个条目将 CLOSE_TIME。那么如何使用OPEN_TIME和CLOSE_TIME将两条或多条记录转换为一条记录呢?
将时间条件更改为:
--编辑
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
就变成关闭订单的实例
检查这个
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;