繁体   English   中英

mysql值检查与下一行的值

[英]mysql value check with next row value

我有名为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;

表格视图

在此处输入图片说明

该表包含10万条记录。 我只想获取具有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");

首先,需要特别注意的是,除非您基于对存储数据的了解进行定义,否则i SQL Server永远不会存在“下一条记录”。

MySQL倾向于按照未添加记录的顺序将它们添加到服务器中,但是您从未真正知道。

因此,首先,我们必须根据图像中的数据定义“下一条记录”,我想您想要的是基于id的下一条记录。 如果您知道ID每条记录增加一个,并且记录从不删除,那么我们可以很容易地找到“下一个”记录。

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序列中没有空格的事实进行查询,这将使您想得到。

我真的不知道这是什么类型的应用程序,但是由于您要基于“下一个”行比较和选择行,因此我认为记录按某种方式分组(设计ID?),而“下一个记录”可能不会仅基于ID,但也应考虑设计。

如果您的ID序列中有间隔,或者需要对记录进行分组以定义“下一个”,那么查询会慢很多,但是您可以执行以下操作:

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)

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM