我正在为如何解决sql和(php)的问题而苦苦挣扎。
我有一条生产线,在这条生产线上,当每件产品通过生产线上的机器工具工位时,都会被扫描。由于生产线上有一堆maschine工具,因此每个产品都会通过其方式进行多次扫描。
这个扫描显然变得非常大,一个简单的例子如下:
maschinetoolnumber Date/Time Workpiece
20 8:50 46
30 8:51 56
40 8:52 34
30 8:53 46
70 8:53 77我现在把它按时间排序,整条生产线在每一个地方都在工作。正如你所看到的,46号在20号后3分钟被上传到30号maschine工具中,因为它需要在30之前通过20。
我基本上想知道的是,在所有这些机器工具之间有多少工件。
在SQL中有没有办法只获得每个工件的最后一次扫描,这样我就可以很容易地根据maschine工具编号对它们进行排序,并查看最后通过了哪个maschine工具的数量?
此外,我还想整理出所有经过最后的机器工具站,因为它不再在线上。
所以我想在这里得到的结果是:
maschinetoolnumber Date/Time Workpiece
30 8:51 56
40 8:52 34
30 8:53 46
70 8:53 77编号为20的46号现在已经离开了,因为它已经超过了编号30。
发布于 2020-10-24 20:54:34
您可以从以下内容开始:
SELECT Workpiece, max(maschinetoolnumber) FROM `tablename` group by Workpiece这将返回每个工件经过的最高maschinetoolnumber编号。
发布于 2020-10-24 20:59:37
如果我理解正确的话,您想要的是自上次看到工件以来的行数。如果是这样,那么:
select t.*,
(seqnum - lag(seqnum) over (partition by workpiece order by datetime) - 1) as num_between
from (select t.*, row_number() over (order by datetime) as seqnum
from t
) t;实际上,我可以将其解释为数据中有多少工件。如果是这样的话,那么:
select count(distinct workpiece)
from t;https://stackoverflow.com/questions/64512737
复制相似问题