问题:
    根据“违规记录”表的违规发布日期,代码,从“价格”表中查询相同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.日期)  查出来多条数据的话,该怎么实现上述功能?

解决方案 »

  1.   

    表结构,少量数据,另外SQL文是否指sql语句?
      

  2.   


    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语句的意思。
      

  3.   

    mysql?我帮你看看把,顶多是SQLServer的语法,我不保证mysql能用
      

  4.   

    我只会t-sql,mysql语法不懂,你看看能不能直接用,大部分语法是可以的。CREATE TABLE 价格
         (
           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 行受影响)
     
     
     */