2016-09-24 125 views
0

我有一個非常具體的問題,我在這裏有一年的領域。我需要能夠把它們拉出來,並有一個查詢條件來查看每一行,並選擇年份最大但小於選擇列表中選擇的年份,因爲我使用的連接有很多需要過濾的行。示例我在第1列中有1,2,3,4等行ID。但是我會有一些額外的1說5行1。我想過濾出所有額外的1,在另一列中沒有最大年份。因此,需要使用ID列來查看哪些行可以比較,然後只保留年份列中年份最大的行。會有一些需要比較的分組。說出所有的2和3。仍然保持最大的一年,並篩選出那些最小的那些。Meridium SQL查詢設計

下面是一種基準線查詢,它還篩選我們不再處於服務狀態的行。

SELECT CDFT_Test_Results_Primary_M."Equipment ID" "Equipment ID", 
CDFT_Test_Results_Primary_M."Pass/Fail" "Pass/Fail", 
CDFT_Test_Results_Primary_M."Failure Type" "Failure Type", 
CDFT_Test_Results_Primary_M."Desired Interval (MO)" "Desired Interval (MO)", 
CDFT_Test_Results_Primary_M."Task Description" "Task Description", 
CDFT_Test_Results_Primary_M."Year" "Year", 
CDFT_Test_Results_Primary_M."Site" "Site", 
CDFT_Test_Results_Primary_M."Device Type" "Device Type", 
CDFT_Test_Results_Primary_M."Execution Date" "Execution Date", 
CDFT_Test_Results_Primary_M."Eqpt Manufacturer" "Eqpt Manufacturer", 
CDFT_Test_Results_Primary_M."Eqpt Manufacturer Model Num" "Eqpt Manufacturer Model Num", 
CDFT_Test_Results_Primary_M."Eqpt Manufacturer Serial Nu" "Eqpt Manufacturer Serial Nu", 
CDFT_Test_Results_Primary_M."Decommission Year" "Decommission Year", 
CDFT_Test_Results_Primary_M."Commission Year" "Commission Year", 
CDFT_Test_Results_Primary_M."Equipment Key" "Equipment Key", 
CDFT_Test_Results_Primary_M."Test Key" "Test Key" 

FROM (! 'Personal[cmgray1]\Queries\CDFT Updated\CDFT Test Results Primary Multi Year Pre Non-Test') CDFT_Test_Results_Primary_M 

WHERE (((CDFT_Test_Results_Primary_M."Year" <= CDFT_Test_Results_Primary_M."Decommission Year" 
AND CDFT_Test_Results_Primary_M."Year" >= CDFT_Test_Results_Primary_M."Commission Year") 
AND CDFT_Test_Results_Primary_M."Decommission Year" >= (? :s :caption='Year Selection' :id=DecomYear :l='2009','2010','2011','2012','2013','2014','2015','2016','2017','2018','2019','2020' :excl) 
AND CDFT_Test_Results_Primary_M."Commission Year" <= (? :s :caption='Year Selection' :id=DecomYear :l='2009','2010','2011','2012','2013','2014','2015','2016','2017','2018','2019','2020' :excl)) 
OR (CDFT_Test_Results_Primary_M."Decommission Year" IS NULL AND CDFT_Test_Results_Primary_M."Commission Year" IS NULL) 
OR (CDFT_Test_Results_Primary_M."Year" >= CDFT_Test_Results_Primary_M."Commission Year" 
AND CDFT_Test_Results_Primary_M."Decommission Year" IS NULL 
AND CDFT_Test_Results_Primary_M."Commission Year" <= (? :s :caption='Year Selection' :id=DecomYear :l='2009','2010','2011','2012','2013','2014','2015','2016','2017','2018','2019','2020' :excl)) 
OR (CDFT_Test_Results_Primary_M."Year" <= CDFT_Test_Results_Primary_M."Decommission Year" 
AND CDFT_Test_Results_Primary_M."Decommission Year" >= (? :s :caption='Year Selection' :id=DecomYear :l='2009','2010','2011','2012','2013','2014','2015','2016','2017','2018','2019','2020' :excl) 
AND CDFT_Test_Results_Primary_M."Commission Year" IS NULL)) 

正如您在下面看到的,如果按設備ID進行分組,您將在任務描述下獲得多年。我希望能夠挑選最大的組合並過濾掉其餘的組合。例如,2009年應該被濾除,並且2013年的點仍然適用於類似設備ID的設備。

enter image description here

+0

即使是我應該看的方向的想法也沒有問題。我一直在這裏擱淺了一段時間。 – ColdTeck

+3

你可以用這種格式閱讀你自己的查詢嗎?我不能。請以可讀方式格式化,並將其降至核心問題。 –

+0

其中rdbms全部3個?如果全部3個,你通常可以取出oracle和sql-server,因爲mysql將成爲函數特定方法中更受限制的方法之一。接下來我同意juergen格式化查詢,以便它可讀。我開始努力,但是不想讓你做。接下來,您要求那些很可能知道系統功能的人提供建議,因此我們並不需要這些圖像來告訴我們它們是什麼。最後應包括示例數據和期望的結果。但是,聽起來像你需要重新考慮說明,以最大年份小於輸入變量cte與row_number – Matt

回答

0

我結束了由ID使得一個子查詢,以組然後用來在該列中的MAX函數。然後,我使用了一個連接函數返回到原始查詢,以獲得我需要的。