我正在寻找一个如何分析问题的方向。我在一家小型制造公司工作。我们每天涂上约150件物品。那些物品然后转到质量控制。大约70%通过QC。剩下的30%必须以某种方式修复。
我们有5种不同的维修类别:Repaint, Reclear, Remake, Reglaze, Fix
每次订单获得QC时,我的系统都会在“修复”mysql表中输入一些数据。如果它通过QC,则会给出Great
类别。它的结构是这样的:
id | Repair | Date
5 | repaint| 2013-01-01
6 | reclear| 2013-01-01
5 | great | 2013-01-02 ...etc
我需要能够对正在发生的行为进行分析。我想知道什么'路径'项目正在下降。
例如。有多少百分比的商品包含这些类别Reclear->Repaint->Great
。 Repaint->Repaint->Remake->Great
的百分比是多少(每个项目最终都应该以'Great)结尾
我有点坚持从哪里开始弄清楚如何分析这个问题。
我是否应该跟踪表中的维修号码?如果我这样做,那么也许我可以使用自我加入来选择repairnum=1 AND repair=Repaint
与repairnum=2 AND repair='Great'
加入的订单这会告诉我哪些订单沿着路径Repaint->Great
走了我对我有点犹豫不决走这条路是因为1)我不想在向表中插入新行之前必须进行查询并得到修复编号,并且2)似乎我必须有一些非常讨厌的查询来分析项目有5或6(或更多)修理。
也许有人可以指出我正确的方向?
我的应用程序是在php和mysql中。
答案 0 :(得分:0)
您不需要单独的“维修编号”,因为您有每次维修的日期,因此可以按此订购(假设您在一天内可以进行多次维修时也存储时间)
项目的“路径”是按日期顺序修复的列表。如果您只是说SELECT repair FROM repairs WHERE id=5 ORDER BY date ASC
,您会将它们作为行。
诀窍是使用GROUP_CONCAT - SELECT GROUP_CONCAT(repair ORDER BY date ASC SEPARATOR '->') FROM repairs WHERE id=5
完成后,您可以使用GROUP BY
为数据库中的所有产品运行该功能,然后使用HAVING
查找其中的模式:
SELECT
id,
GROUP_CONCAT(repair ORDER BY date ASC SEPARATOR '->') as path
FROM
repairs
GROUP BY
id
HAVING
path = 'Repaint->Repaint->Remake->Great'
请注意,我没有使用MySQL的副本来试试这个,所以我可能犯了一个错误,但是手册表明上面的应该工作。