初心者のFileMaker pro Q&A (旧掲示板)

みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。

1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)

You are not logged in.

Announcement

新しい掲示板は、こちら:https://fm-aid.com/forum/t/filemaker


#1 2017-04-08 12:25:08

kuro
Member

連続した値の最大値

お世話になります。
テーブルAをフィールド名「あいう」同士で自己リレーション(リレーション先:テーブルA')を
組んだとします。
テーブルAから見て、テーブルA'のフィールド名「かきく」の数字で最大値をとりたいです。
「かきく」の場合、最小値は1ですが、最大値は連続していない場合があります。
MAX関数をとれば、最大値は取れますが、本当にほしい数字は連続した数字の最大値なのです。
例;
1,2,3⇒3
1,3⇒2
2,3⇒1

このような数字を実現する関数はありますでしょうか?
どなたかご教授をお願いいたします。

fm13 ad
windows7

Offline

#2 2017-04-08 12:57:31

Re: 連続した値の最大値

多分再起計算式の提案が出ることともいますが、
私は、スクリプトでLOOPでソートされたレコードを
最初から見て行って、途切れたところの値を返すという方法を提案して起きます。

カスタム関数で、処理する方法もありますが、
再帰計算になるので、ちょいと面倒かなぁ?
ということで わたしはスクリプトをお勧めします。

Offline

#3 2017-04-08 13:17:25

kuro
Member

Re: 連続した値の最大値

シーラカンス様

ありがとうございます。
数字は1と2と3しか使わないのですが、
case関数とcount関数の組み合わせで何とかならないでしょうか?

Offline

#4 2017-04-08 13:54:40

Shin
Member

Re: 連続した値の最大値

1,3⇒2
2,3⇒1
の法則性がわかりません。また、最小値が1の意味は?

Let(
[
 $t = ¶ & List ( リレーション::かきく ) & ¶ ; 
 $max = 1 ;
 $fnc =
  "Case ( 
    PatternCount ( $t ; \¶ & $max & \¶) = 0 ; Max ( 1 ; $max - 1 ) ;
    Let(
    [
     $max = $max + 1 
    ] ; Evaluate ( $fnc ) ) 
 )"
] ;
 Evaluate ( $fnc )
)

が、1から始まる連続数の最大値を求める一般解になります。

1,2,3 だけならば、
Case (
ValueCount ( FilterValues ( リレーション::かきく ; List ( 1 ; 2 ; 3 ) ) = 3 ; 3 ;
ValueCount ( FilterValues ( リレーション::かきく ; List ( 1 ; 2  ) ) = 2 ; 2 ;
1
)
でも良いかもしれません。

1,3⇒1
2,3⇒3
ということでしたら、不連続は 1,3 の時だけですので、
Case (
ValueCount ( FilterValues ( リレーション::かきく ; List ( 1  ; 3 ) ) = 2 ; 1 ;
Max ( リレーション::かきく )
)
でもいいかも。

Last edited by Shin (2017-04-08 14:54:23)

Offline

#5 2017-04-08 17:07:43

kuro
Member

Re: 連続した値の最大値

Shin様

ご教授、ありがとうございます。
上記パターンですが、フィールド「あいう」=注文番号、「かきく」⁼各注文番号毎の分番号です
そのため、最小値は1なのです。
例えば、注文番号で分番1、2、3番とデータがあったとして、1番をキャンセルしたとして、再度入力し、分番を取得するときは、4番ではなく、
1番を取得したいと考えています。
また、2番をキャンセルし、2番が空欄になったところで、2番を再度入力したときに分番は2番を取得したいのです。
もし、1、2ともにキャンセルして、再度入力するときには、先ず1番の分番を取得することになります

上のLET関数は私にはレベルが高すぎて理解、応用できそうにありません、
上記観点で再度教えていただけないでしょうか?

お手数をおかけししますが、ご確認をお願いします。

Offline

#6 2017-04-08 17:18:02

Shin
Member

Re: 連続した値の最大値

最初の説明からは全然違っている様に思いますが。
要するに、1を使っていなければ1、2を使っていなければ2、それ以外は3を返せば良いのでは。
Case (
PatternCount ( List ( リレーション::かきく ) ; "1" ) = 0 ; 1 ;
PatternCount ( List ( リレーション::かきく ) ; "2" ) = 0 ; 2 ;
3
)

Offline

#7 2017-04-11 12:35:52

kuro
Member

Re: 連続した値の最大値

Shin様
ありがとうございます。
出来ました!

Offline

Registered users online in this topic: 0, guests: 1
[Bot] ClaudeBot

Board footer

Powered by FluxBB
Modified by Visman

[ Generated in 0.006 seconds, 9 queries executed - Memory usage: 558.19 KiB (Peak: 582.3 KiB) ]