クエリビルダー - 固有のレコード<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />こんにちは 、
私の問題を解決するために個人的にかなり苦労した結果、ユーザーと JMP コミュニティへの質問として投稿することにしました。
p1、p2、資産、時刻を取得するデータベースを用意します。 データベースは蓄積データベースです。つまり、パラメータ p1 と p2 がそれぞれの最後の状態を表すものとしてロードされます。資産特定の場所で時間。 言い換えれば、p1 と p2 の以前の古いインスタンスは無効であり、特定の環境には p1 と p2 の最新バージョンが必要です。資産最新の報告では時間。
したがって、必要なのは降順です時間そして、結果が次の時点で一意になるように強制します資産レベル。
これをクエリビルダーでどのように指示する必要があるかについて何かアイデアはありますか?
むしろ、カスタム SQL を使用しないソリューションを希望します。 実際にはカスタム SQL で解決策を持っていますが、カスタム SQL では実行が難しい部分をさらにいくつか追加する予定なので、クエリ ビルダー内でこれを実行する方法を学びたいと思っています。
助けていただきありがとうございます。
アルトゥグ バイラム
Re: クエリ ビルダー - 固有のレコードこれは古い投稿ですが、次のとおりです。
@altug_bayram書きました:
追加するのを忘れていました...
もともとクエリを機能させることができなかった理由は、データベースを正しい方法で参照していなかったためです。 それを実行したら、うまくいきました
正しい作法は何だったのでしょうか? また、「エラー: リレーション "databases_enzyme_db" が存在しません; パラメーターの準備中にエラーが発生しました [SQLSTATE=42P01]」というエラーも表示され、トラブルシューティングの方法がわかりません。
Re: クエリ ビルダー - 固有のレコードどういたしまして。このスレッドにより、サブクエリに対する私の理解が深まりました。私は多くのことを学びました。
気をつけて、
エリック
Re: クエリ ビルダー - 固有のレコードエリック、
今ではよく理解できましたし、あなたに同意します。 繰り返しになりますが、この問題にご協力いただきありがとうございます。
あなたの助けはとても貴重でした。
Re: クエリ ビルダー - 固有のレコードTime のみで元のバージョンを実行し、X で MAX 集計を使用すると、正しい行を返すことができますが、それらの行の p1 と p2 の値を見つけることはできません。クエリにp1とp2を残したままあなたが言ったことを行うと、p1とp2がクエリのGROUP BYになるため、重複した最大回数を持つすべての行が取得されます。

ここで、クエリから p1 と p2 を取り出すと、クエリは正しい行を返します。

しかし、重要なのはこれらの行の p1 と p2 の値を見つけることであり、それらは失われています。したがって、ダブルサブクエリアプローチが、あなたが尋ねた質問に答える唯一のアプローチだと思います。
エリック
Re: クエリ ビルダー - 固有のレコードエリック、
まるで魔法のようにうまくいきました...
私は疑問に思っています...カスタム表現の最初のオリジナルバージョン(時間のみ)を実行し、かつ「含まれる列」フィールド内の「最大」としてX集計を選択することでも機能したでしょうか...?
本当にありがとう ....
Re: クエリ ビルダー - 固有のレコードここには実際には個別の行がないため、DISTINCT は OP には役に立ちません。
2 番目のケースを解決するクエリを見つけました。各アセットの最大時間を複製する 6 行を下部に追加し、さらに X 変数を追加しました。表は次のとおりです。

そして、機能するクエリは次のとおりです (1 つのサブクエリと、サブクエリ内に 1 つのサブクエリが必要です)。

カスタム式は次のとおりです。
t1.Time = (SELECT MAX(tInner.Time) FROM パーツ tInner WHERE t1.Asset = tInner.Asset)
と
t1.X = (SELECT MAX(tInner.X) FROM 部品 tInner WHERE t1.Asset = tInner.Asset AND
tInner.Time = (SELECT MAX(tInner2.Time) FROM パーツ tInner2 WHERE tInner.Asset = tInner2.Asset))
読みやすくするために、SQL キーワードはすべて大文字にしました。いくつかの簡単なクエリを試しましたが、機能しませんでした。
HTH、
エリック
Re: クエリ ビルダー - 固有のレコード重複したエントリの場合は、DISTINCT キーワードを使用すると役立つでしょう。
Re: クエリ ビルダー - 固有のレコード追加するのを忘れていました...
もともとクエリを機能させることができなかった理由は、データベースを正しい方法で参照していなかったためです。 それを実行したら、うまくいきました
Re: クエリ ビルダー - 固有のレコードエリック、
どうもありがとう ....
申し訳ありませんが、GE の別のクエリ熟練者と協力して解決するのに時間がかかりました。
あなたの解決策(最初の解決策)は間違いなく機能しました!!! 2番目のものはまだ試していません。
もう一つ問題があります -
データベースにデータを追加した人々が、最後の同じ時間にいくつかのアセットに重複したエントリを挿入したことが判明しました。 そこで、これを回避するために、「say X」というタイトルの別の列を作成しました。 手動では、X が最も大きい 2 つを単純に選択します。 X 自体はそれほど信頼できない可能性がありますが、重複する時間エントリの選択要素になるため、Max(Time) から Max(X) に変換することは望ましくありませんでした。
元のカスタム式を 2 番目の MAX (X 上) を含むように変換しようとしましたが、うまくいきませんでした...
したがって、時間が MAX である各アセットをプルしようとします。複数のエントリがある場合は、Max(X) のエントリを選択します。
助言がありますか
Re: クエリ ビルダー - 固有のレコード私の元の例は SQL Server でしたが、これはもう少し寛容です。Oracle の場合、サブクエリ内のテーブル名を schema.table としてフォーマットする必要があり、さらに大文字と小文字を混合した名前を引用符で囲む必要がありました。
t1."時間" = (から MAX(t2."時間") を選択)スクBTテスト。 "部品" t2 ここで、t2."資産" = t1."資産")
変更してみてください私のテーブル初めての試みで<スキーマ>.my_tableそれが役立つかどうかを確認してください。
エリック
Re: クエリ ビルダー - 固有のレコードやあ、アルトゥグ、
どのようなデータベースを使用していますか?
探している結果が得られるカスタム SQL クエリの SQL を共有していただけませんか?
ありがとう、
エリック
Re: クエリ ビルダー - 固有のレコードこんにちは、エリックさん
まずはご協力に感謝いたします....
あなたの理解は正しいです。 時間が最大(または最新)のアセットごとに単一の行を取得しようとしているだけです。
あなたの公式を適用しました。 ただし、エラーが発生します。
最初に実際のテーブル名として適用し、次に「t1」として適用しました。
t1.calendar_month = (my_table t2 から MAX(calendar_month) を選択します。ここで、t1.engine_serial_num = t2.engine_serial_num)
t1.calendar_month = (t1.engine_serial_num = t2.engine_serial_num である t1 t2 から MAX(calendar_month) を選択します)
エラー: リレーション "my_table" が存在しません。
クエリの実行中にエラーが発生しました [SQLSTATE: 42P01]
Re: クエリ ビルダー - 固有のレコードやあ、アルトゥグ、
これは、あなたが説明しているものに似ていると思われるテーブルです(ただし、それがJMPではなくデータベースにあると仮定します)。

私の理解では、Time が最大である A1、A2、A3、A4 の 1 行を取得したいということです。あれは正しいですか?
MAX 関数を使用するサブクエリを実行せずにそれが可能であるとは思えませんが、これはカスタム式フィルターを使用して実行できます。最終的にできたクエリは次のとおりです。

小さすぎて読めない場合のために、カスタム式は次のとおりです。
t1.Time = (t1.Asset = t2.Asset の部分 t2 から MAX(Time) を選択)
したがって、メイン クエリ (t1.Asset) から Asset の値を渡し、そのアセットの最大時間値を持つ行を選択します。
それが役立つかどうか教えてください。
エリック
Re: クエリ ビルダー - 固有のレコード明細書
素早い返信ありがとうございます。
ただし、ここで重要なことを見逃していない限り、これで問題は解決されません。
1) 通常、アセットの最後の有効な時点は同じ時点ではなく、まったく異なります。 それらには何年もの違いがある可能性があります。
2) 可能な限り迅速な解決策は求めていません。 これを完全に自動化する必要があります。
3) >= を使用した「フィルター」でどのように一意にすることができるのか、本当にわかりません。 むしろ「=」でフィルタリングするつもりだったと思います
したがって、時間フィルターを指定せずに、あらゆるアセットの最新の時系列エントリを取得するアプローチが必要です (最新のデータは時間のどこにでも存在する可能性があるため)。
ありがとう。
Re: クエリ ビルダー - 固有のレコードこんにちは、アルトゥグさん
時間の降順を取得するには、下の画像を参照してください。
[利用可能な列] で時間変数を右クリックし、[並べ替え] を選択すると、右下に新しいダイアログ ボックスが表示されます。そこから、下向きの矢印を選択して、希望の時間順序を取得できます。
その後、プロンプトを含むフィルターを使用して、一意のアセット レベルを選択できます。
