我希望在保留序列的同时汇总生产计划中(相同)部分的数量。
我的表格如下:
-------------------------------------------------
|Part Number | Production Sequence Number | .... |
-------------------------------------------------
| 1| 1| .... |
--------------------------------------------------
| 1| 2| .... |
--------------------------------------------------
| 2| 3| .... |
--------------------------------------------------
| 2| 4| .... |
--------------------------------------------------
| 1| 5| .... |
--------------------------------------------------
我需要连续计算相同零件的数量:
预期结果:
-------------------------------------------------
|Part Number | Nr of pieces in a row | .... |
-------------------------------------------------
| 1| 2| .... |
-------------------------------------------------
| 2| 2| .... |
-------------------------------------------------
| 1| 1| .... |
-------------------------------------------------
这可以通过unsing SQL(MySQL)来完成吗?
答案 0 :(得分:0)
这在MySQL中很棘手。一种方法是使用相关子查询来定义组。您可以通过计算当前行之前与该行上的部件号不同的部件号的数量来定义组。这唯一标识组:
data_dict
我应该注意,为此目的,您将在大多数数据库中使用窗口函数。使用相关子查询是因为MySQL缺乏这一重要功能。
答案 1 :(得分:0)
我喜欢这个让我搜索和发现新事物的问题,我已经有了想要让它成为现实的想法,关于这个想法很简单:
11221
)11,22,1
)[11, 22, 1]
)2,2,1
)PostgreSQL解决方案:
我已经解决了PostgreSQL中的问题我认为有办法将其翻译成MySQL语法
SELECT
SUBSTRING(regexp_split_to_table(regexp_replace(array_to_string(array_agg(part), ''), '((\d)\2+)', '\1,', 'g'), ','), 1, 1) as part_number,
length(regexp_split_to_table(regexp_replace(array_to_string(array_agg(part), ''), '((\d)\2+)', '\1,', 'g'), ',')) as production_sequence_number
FROM
mytable
输出
答案 2 :(得分:0)
您可以使用变量来模拟数字,然后执行GROUP BY
SELECT id, COUNT(*)
FROM
(
SELECT
@row_number:=CASE
WHEN @seq_num = id THEN @row_number
ELSE @row_number + 1
END AS num,
@seq_num:=id as id,
seq_num
FROM tab, (SELECT @row_number:=0, @seq_num := 1) t
ORDER BY seq_num
) t
GROUP BY num, id