mysql值检查下一行值

时间:2014-06-11 06:28:53

标签: php mysql

我有一个名为cm的mysql表

CREATE TABLE `cm` (
  `id` int(10) NOT NULL,
  `chit_no` varchar(30) DEFAULT NULL,
  `pjt_no` varchar(20) DEFAULT NULL,
  `design` varchar(25) DEFAULT NULL,
  `item` varchar(25) DEFAULT NULL,
  `process` varchar(10) DEFAULT NULL,
  `times` int(1) DEFAULT NULL,
  `current_position` int(1) DEFAULT NULL,
  `current_stage` int(1) DEFAULT NULL,
  `qty` int(10) DEFAULT NULL,
  `dmg` int(2) DEFAULT NULL,
  `bbelt` varchar(10) DEFAULT NULL,
  `fdate` date DEFAULT NULL,
  `remarks` varchar(500) DEFAULT NULL,
  `shift` int(1) DEFAULT NULL,
  `date` varchar(100) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

表格视图

enter image description here

此表包含100K记录。我想只获得具有 Process = Firing和last_record = 1 AND qty> 0的行以及下一个记录qty = 0 的特定日期范围

我试过这段代码,但没有输出。

 $sql =mysql_query("SELECT * 
                      FROM cm  
                     WHERE  (    process='Firing' 
                             AND qty>0 
                             AND last_record='1'
                            ) 
                        AND 1>(SELECT qty 
                                 FROM cm 
                                WHERE id=id+1)  
                        AND fdate BETWEEN '$from' AND '$to' 
                   ORDER BY cm.id,design, item,chit_no")
        or die ("err1");

1 个答案:

答案 0 :(得分:1)

首先,重要的是要注意我的SQL服务器从来没有"下一条记录",除非你根据存储数据的知识定义它。

MySQL倾向于按照添加的顺序为您排序未分类的记录,但您真的不知道。

首先,我们必须定义"下一条记录"根据您在图像中的数据,我猜你想要的是基于id的下一条记录。如果你知道,每个记录增加一个id,并且永远不会删除记录,那么我们就可以找到" next"很容易记录。

select
  c.*
from
  cm c
where
  c.process='Firing'
and
  c.last_record=1
and
  c.qty>0 /*easy part done*/
and
  exists (select id from cm c2 where c2.id=c1.id+1 and c2.qty=0)

如果您可以根据id序列中没有间隙这一事实进行查询,这将是您想要的。

我真的不知道这是什么类型的应用程序,但是因为你想根据" next"来比较和选择行。行,我想记录分组如何(设计ID?)和那个"下一个记录"可能不仅仅基于id,而且还应考虑到例如设计。

如果您的ID序列中存在空白,或者需要对记录进行分组以定义" next"然后你的查询会慢得多,但你可以这样做:

select
  c.*
from
  cm c
where
  c.process='Firing'
and
  c.last_record=1
and
  c.qty>0 /*easy part done*/
and
  exists (select id from cm c2 where c2.Id=(select min(id) from cm c3 where c3.id>c.id and c3.design=c1.design) and c2.qty=0)

如果可能,请重新评估您的数据模型/双逻辑