我在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订单。你能看一下你的数据吗,因为如果它适用于其他两个订单,那么它也适用于这个订单。。