查詢生成器 - 唯一記錄<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />你好 ,
經過一番個人努力來解決我的問題後,我決定將其作為問題發布給用戶和 JMP 社區。
有一個數據庫,從中提取 p1、p2、資產和時間。 數據庫是一個累積數據庫,這意味著參數 p1 和 p2 被加載為代表每個的最後狀態資產在特定的時間. 換句話說,p1 和 p2 的先前舊實例是無效的,並且給定的需要 p1 和 p2 的最新版本資產據最新報導時間.
因此,我需要的是降序通過時間然後強制結果在資產等級。
關於我需要如何在查詢生成器中指導它的任何想法?
我更喜歡通過不使用自定義 SQL 來獲得解決方案.... 我實際上在 Custom SQL 中有一個解決方案,但我想學習如何在查詢構建器中執行此操作,因為我將添加一些在 Custom SQL 中很難做到的部分
感謝幫助。
阿爾圖拜拉姆
回复:查詢生成器 - 唯一記錄這是一個舊帖子,但這裡是:
@altug_bayram寫道:
我忘了添加...
我最初無法使您的查詢正常工作的原因是我沒有以正確的方式引用數據庫。 一旦我們這樣做了,它就奏效了
正確的方式是什麼? 我還收到一條錯誤消息,提示“錯誤:關係“databases_enzyme_db”不存在;準備參數時出錯 [SQLSTATE=42P01]”,我不確定如何解決它
回复:查詢生成器 - 唯一記錄我的榮幸。這個線程確實推動了我對子查詢的理解。我學到了很多。
小心,
埃里克
回复:查詢生成器 - 唯一記錄埃里克,
我現在理解得更好並且同意你的看法。 再次感謝您為此問題所做的努力。
您的幫助非常寶貴。
回复:查詢生成器 - 唯一記錄僅使用 Time 運行原始版本並在 X 上使用 MAX 聚合可以返回正確的行,但您將無法找出這些行的 p1 和 p2 的值。如果我按照你說的在查詢中留下 p1 和 p2,我會得到所有具有重複最大次數的行,因為 p1 和 p2 成為查詢的 GROUP BY:

現在,如果我從查詢中取出 p1 和 p2,查詢將返回正確的行:

但重點是為這些行找到 p1 和 p2 的值,它們已經消失了。所以我認為雙重子查詢方法是唯一可以回答您提出的問題的方法。
埃里克
回复:查詢生成器 - 唯一記錄埃里克,
它就像一個魅力...
我想知道......它是否也可以通過運行自定義 epxression 的第一個原始版本(只有時間)並在“包含的列”字段中選擇 X 聚合作為“最大值”來工作......?
非常感謝 ....
回复:查詢生成器 - 唯一記錄DISTINCT 不會幫助 OP,因為這裡確實沒有任何不同的行。
我找到了可以解決第二種情況的查詢。我在底部添加了 6 行,用於復制每個資產的最大次數,並添加了一個 X 變量。這是表格:

這是有效的查詢(它需要一個子查詢和一個子查詢中的一個子查詢):

自定義表達式為:
t1.Time = (SELECT MAX(tInner.Time) FROM parts tInner WHERE t1.Asset = tInner.Asset)
和
t1.X = (SELECT MAX(tInner.X) FROM parts tInner WHERE t1.Asset = tInner.Asset 和
tInner.Time = (SELECT MAX(tInner2.Time) FROM parts tInner2 WHERE tInner.Asset = tInner2.Asset))
我將所有的 SQL 關鍵字都大寫以便於閱讀。我嘗試了一些更簡單的查詢,但它們沒有用。
衛生部,
埃里克
回复:查詢生成器 - 唯一記錄如果它是重複條目,也許使用 DISTINCT 關鍵字會有所幫助。
回复:查詢生成器 - 唯一記錄我忘了添加...
我最初無法使您的查詢正常工作的原因是我沒有以正確的方式引用數據庫。 一旦我們這樣做了,它就奏效了
回复:查詢生成器 - 唯一記錄埃里克,
多謝 ....
抱歉,我花了一些時間與 GE 的另一位查詢專家一起解決這個問題。
您的解決方案(第一個)絕對有效!!! 我還沒有嘗試過第二個。
我還有一個問題——
事實證明,填充數據庫的人在最後一個時間順序上為一些資產插入了重複條目。 因此,為了解決這個問題,我還有一個名為 say X 的專欄。 我會手動選擇兩個最大的 X。 我不想從 Max(Time) 轉換為 Max(X),因為 X 本身可能不那麼可靠,但會成為重複時間條目的選擇因素。
我們嘗試將您的原始自定義表達式轉換為包括第二個 MAX(在 X 上)...但這沒有用...
所以 .. 嘗試提取時間為 MAX 的每個資產,如果有多個條目選擇帶有 Max(X) 的條目
有什麼建議
回复:查詢生成器 - 唯一記錄我最初的示例是針對 SQL Server 的,它更寬容一些。對於 Oracle,我必須將子查詢中的表名格式化為 schema.table,而且我必須引用我的混合大小寫名稱:
t1."Time" = (從中選擇 MAX(t2."Time") SQB測試。 “零件” t2 其中 t2.“資產” = t1.“資產”)
嘗試改變我的表在你第一次嘗試<架構>.my_table看看是否有幫助。
埃里克
回复:查詢生成器 - 唯一記錄嘿,阿爾圖格,
你使用什麼數據庫?
您是否願意分享自定義 SQL 查詢中的 SQL,從而為您提供所需的結果?
謝謝,
埃里克
回复:查詢生成器 - 唯一記錄你好埃里克,
首先感謝您的幫助....
你的理解是正確的。 我只是想為時間最大(或最近)的每個資產拉一行。
我應用了你的公式。 但是,它給了我一個錯誤。
我首先將它用作真實表名,然後將其用作“t1”
t1.calendar_month = (select MAX(calendar_month) from my_table t2 where t1.engine_serial_num = t2.engine_serial_num)
t1.calendar_month = (select MAX(calendar_month) from t1 t2 where t1.engine_serial_num = t2.engine_serial_num)
錯誤:關係“my_table”不存在。
執行查詢時出錯 [SQLSTATE: 42P01]
回复:查詢生成器 - 唯一記錄嘿,阿爾圖格,
這是一個我認為類似於您所描述的表(但假設它在數據庫而不是 JMP 中):

我的理解是,您想為 A1、A2、A3 和 A4 檢索時間最長的一行。那是對的嗎?
如果不執行使用 MAX 函數的子查詢,我認為這是不可能的,您可以使用自定義表達式過濾器來執行此操作。這是我最終得到的查詢:

如果太小而無法閱讀,則自定義表達式為:
t1.Time =(從 t2 部分中選擇 MAX(時間),其中 t1.Asset = t2.Asset)
因此,您從主查詢 (t1.Asset) 傳入資產值,並選擇具有該資產最大時間值的行。
讓我知道是否有幫助。
埃里克
回复:查詢生成器 - 唯一記錄賬單
感謝您的快速回复。
但是,除非我在這裡遺漏了一個關鍵的東西,否則這並不能解決我的問題。
1) 任何資產的最後有效點通常不在同一時間點,它們是完全不同的。 他們可以有多年的差異。
2)如果可能的話,我不會尋找快速的解決方案。 我需要它完全自動化。
3) 我真的不確定使用 >= 的“過濾依據”如何使它獨一無二。 我認為你寧願用“=”過濾
因此,我需要一種方法來獲取任何資產的最新時間順序條目,而無需指定時間過濾器(因為最新數據可以在任何時間)。
謝謝。
回复:查詢生成器 - 唯一記錄嗨,阿爾圖格,
請參閱下圖以獲取時間的降序。
右鍵單擊可用列中的時間變量,然後選擇“排序方式”,右下方會彈出一個新對話框。從那裡您可以選擇下降箭頭以獲得所需的時間順序。
然後,您可以使用帶有提示的過濾器來選擇唯一的資產級別。
