问题:
根据“违规记录”表的违规发布日期,代码,从“价格”表中查询相同ID的记录,及该ID的前面三条记录和该ID的后面三条记录。我做了一个方法,但是前提是子SQL文:select a.ID from 价格 a , 违规记录 b where a.代码= b.代码 and a.日期 = b.日期) 查出来的记录只有一条才好使。多条记录就不行了,请各位大侠指点迷津!select * from 价格 where 价格.ID < (select c.ID from 价格 c where c.ID in (select a.ID from 价格 a , 违规记录 b where a.代码= b.代码 and a.日期 = b.日期)) +3 and 价格.ID > (select c.ID from 价格 c where c.ID in (select a.ID from 价格 a , 违规记录 b where a.代码= b.代码 and a.日期 = b.日期)) -3在上面的SQL文中,如果子SQL文:select a.ID from 价格 a , 违规记录 b where a.代码= b.代码 and a.日期 = b.日期) 查出来多条数据的话,该怎么实现上述功能?
根据“违规记录”表的违规发布日期,代码,从“价格”表中查询相同ID的记录,及该ID的前面三条记录和该ID的后面三条记录。我做了一个方法,但是前提是子SQL文:select a.ID from 价格 a , 违规记录 b where a.代码= b.代码 and a.日期 = b.日期) 查出来的记录只有一条才好使。多条记录就不行了,请各位大侠指点迷津!select * from 价格 where 价格.ID < (select c.ID from 价格 c where c.ID in (select a.ID from 价格 a , 违规记录 b where a.代码= b.代码 and a.日期 = b.日期)) +3 and 价格.ID > (select c.ID from 价格 c where c.ID in (select a.ID from 价格 a , 违规记录 b where a.代码= b.代码 and a.日期 = b.日期)) -3在上面的SQL文中,如果子SQL文:select a.ID from 价格 a , 违规记录 b where a.代码= b.代码 and a.日期 = b.日期) 查出来多条数据的话,该怎么实现上述功能?
CREATE TABLE `价格` (`ID` int(5) NOT NULL, `代码` char(10) DEFAULT NULL, `日期` date DEFAULT NULL, `今盘` int(10) DEFAULT NULL, `最高` int(10) DEFAULT NULL, PRIMARY KEY (`ID`));INSERT INTO `价格` VALUES ('1', 'SZ000001', '2012-09-22', '13', '23');
INSERT INTO `价格` VALUES ('2', 'SZ000001', '2012-07-17', '14', '56');
INSERT INTO `价格` VALUES ('3', 'SZ000001', '2012-09-26', '15', '32');
INSERT INTO `价格` VALUES ('4', 'SZ000003', '2012-07-18', '11', '77');
INSERT INTO `价格` VALUES ('5', 'SZ000002', '2012-09-11', '98', '90');
CREATE TABLE `违规记录` ( `ID` int(5) NOT NULL AUTO_INCREMENT, `标题` int(10) DEFAULT NULL, `日期` date DEFAULT NULL, `代码` char(10) DEFAULT NULL, PRIMARY KEY (`ID`));INSERT INTO `违规记录` VALUES ('1', '2222222', '2012-09-22', 'SZ000002');
INSERT INTO `违规记录` VALUES ('2', '11111', '2012-09-11', 'SZ000002');
INSERT INTO `违规记录` VALUES ('3', '4444444', '2012-07-18', 'SZ000003');
这是我导出来的SQL语句 SQl文就是SQl语句的意思。
(
ID INT PRIMARY KEY ,
代码 CHAR(10) DEFAULT NULL ,
日期 DATE DEFAULT NULL ,
今盘 INT DEFAULT NULL ,
最高 INT DEFAULT NULL,
) ;
INSERT INTO 价格
VALUES ( '1', 'SZ000001', '2012-09-22', '13', '23' ) ;
INSERT INTO 价格
VALUES ( '2', 'SZ000001', '2012-07-17', '14', '56' ) ;
INSERT INTO 价格
VALUES ( '3', 'SZ000001', '2012-09-26', '15', '32' ) ;
INSERT INTO 价格
VALUES ( '4', 'SZ000003', '2012-07-18', '11', '77' ) ;
INSERT INTO 价格
VALUES ( '5', 'SZ000002', '2012-09-11', '98', '90' ) ;
CREATE TABLE 违规记录
(
ID INT IDENTITY(1, 1)
NOT NULL ,
标题 INT DEFAULT NULL ,
日期 DATE DEFAULT NULL ,
代码 CHAR(10) DEFAULT NULL ,
PRIMARY KEY ( ID )
) ;
INSERT INTO 违规记录
( 标题 ,
日期 ,
代码
)
VALUES ( '2222222' ,
'2012-09-22' ,
'SZ000002'
) ;
INSERT INTO 违规记录
( 标题, 日期, 代码 )
VALUES ( '11111', '2012-09-11', 'SZ000002' ) ;
INSERT INTO 违规记录
( 标题 ,
日期 ,
代码
)
VALUES ( '4444444' ,
'2012-07-18' ,
'SZ000003'
) ;
--根据“违规记录”表的违规发布日期,代码,从“价格”表中查询相同ID的记录,及该ID的前面三条记录和该ID的后面三条记录。
SELECT *
FROM 价格 J
WHERE EXISTS ( SELECT 1
FROM ( SELECT id
FROM 价格 a
WHERE EXISTS ( SELECT 1
FROM 违规记录 b
WHERE a.日期 = b.日期
AND a.代码 = b.代码 )
) a
WHERE J.id BETWEEN a.id - 3 AND a.id + 3 )
/*
ID 代码 日期 今盘 最高
----------- ---------- ---------- ----------- -----------
1 SZ000001 2012-09-22 13 23
2 SZ000001 2012-07-17 14 56
3 SZ000001 2012-09-26 15 32
4 SZ000003 2012-07-18 11 77
5 SZ000002 2012-09-11 98 90
(5 行受影响)
*/