2016-09-24 3 views
0

나는 년 안에 필드가있는 매우 특정한 문제가 있습니다. 나는 그들을 끌어낼 수 있어야하고 각 행을보고 선택 목록에서 선택한 연도보다 크지 만 가장 큰 연도를 선택하는 기준을 만드는 쿼리가 있어야합니다. 왜냐하면 내가 사용하는 조인에 필터링해야 할 행 예 : 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의 장치에 남아 있습니다. 내가 ID로 그룹에 서브 쿼리를 만들고 결국

enter image description here

+0

내가 바라 봐야 할 방향에 대한 아이디어조차도 괜찮을 것이다. 나는 이것에 잠시 동안 곤두박질 쳤다. – ColdTeck

+3

해당 형식으로 고유 한 쿼리를 읽을 수 있습니까? 나는 할 수 없었다. 읽을 수있는 방식으로 형식을 지정하고 핵심 문제로 줄이십시오. –

+0

어느 rdbms 모두 3? mysql이 함수 특정 메소드에서 더 많은 제한 사항 중 하나가 될 것이기 때문에 all 3이라면 일반적으로 oracle과 sql-server를 사용할 수 있습니다. 다음으로 나는 juergen 형식으로 쿼리를 읽을 수 있도록 동의합니다. 나는 너를하기 시작했다. 다음으로는 시스템의 기능을 잘 아는 사람들보다 더 많은 조언을 구하기 때문에 이미지가 실제로 무엇인지 말해 줄 필요가 없습니다. 마지막으로 예제 데이터와 원하는 결과가 포함되어야합니다. 그러나 당신은 맥스 년 설명을 재고 할 필요가있는 것처럼 들리네 row_number와 입력 변수 cte 미만보다 – Matt

답변

0

는 해당 열에서 MAX 함수를 사용했다. 그런 다음 원래 쿼리에 다시 조인 (join) 함수를 사용하여 필자가 필요로하는 것을 정확하게 얻었습니다.