2017-09-11 3 views
1

シーケンスを保存しながら、私の生産計画で(同一の)部品の数を集計したい。厳密なシーケンス(論理)を持っている間に対応するエントリを数えるためのSQLステートメント

私のテーブルには、次のようになります。

------------------------------------------------- 
|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| .... | 
------------------------------------------------- 

が、これはすることによって行うことができますSQL(MySQL)のみをunsingしますか?

答えて

0

MySQLの構文にそれを翻訳する方法があると思いPostgreSQLの中で問題を解決しました変数を使用して数値をエミュレートし、0を実行することができます

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 

demo

0

これはMySQLでは厄介です。 1つの方法は、相関サブクエリを使用してグループを定義することです。現在の行の前にある部品番号の数を、その行の部品番号から異なるに数えてグループを定義することができます。これは、グループを一意に識別します。

この目的のために、ほとんどのデータベースでウィンドウ関数を使用することに注意してください。 MySQLにはこの重要な機能がないため、相関サブクエリが使用されます。

0

私はそれは私が検索を行い、新しい事descover、私はすでに私はちょうどそれが本物のようにしたいという考えを持っている、という考えについては、この質問が好きは簡単です:

  • は、すべての行(11221
  • を組み合わせますこのセパレータ( [11, 22, 1]
  • 独立セパレータと数字の各deffirence(11,22,1
  • 分割は、各部分の長さをカウント(2,2,1

PostgreSQLのソリューション

私はすでに私は

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 

出力

result

関連する問題