2014-09-08 2 views
0

이 게시물 하단의 작업 코드.고정 SQL 그룹 및 필터

나는이 그냥 SQL/mysql - Select distinct/UNIQUE but return all columns?처럼 실현하지만 난 잃을 총에서 오전은 ... 항상

내가 (모두 같은 테이블에서) 얻을 걸려

방법, 당장 필요로하는 보고서입니다

첫째 - 고유 AsbestosNumber

초 - 마지막 설문 조사 날짜

마지막 것을 기반으로 - 그 아래로 필터링 결과에 따라 가장 높은 위험을 얻을 수는 (첫째는 볼 보는 것은 'A'다음 'B'를 가지고 다음 'C'를 누른 다음 'D'를 anythi ng else

select AsbestosUPRN, OverallRiskCategory, SurveyDate FROM TblAsbestos GROUP BY AsbestosUPRN, OverallRiskCategory, SurveyDate 

그러나 아래에서 오류가 발생하지 않는 것을 시도해 보았습니다.

SELECT * FROM TblAsbestos 

JOIN (SELECT AsbestosUPRN, Max(OverallRiskCategory) FROM TblAsbestos) As Tbl2 
On Tbl2.AsbestosUPRN = Tbl1.AsbestosUPRN 
ORDER BY Tbl1.AsbestosUPRN 

다음 보고서를 수정하여 다른 테이블의 고유 번호로 검색해야합니다.

예 날짜 :

AsbestosUPRN SurveyDate OverallRiskCategory 
011203200 2014-01-07 00:00:00.000 N/A 
011203200 2014-01-07 00:00:00.000 N/A 
011203200 2014-01-07 00:00:00.000 N/A 
011203200 2014-01-07 00:00:00.000 C 
011203200 2014-01-07 00:00:00.000 N/A 
011203200 2014-01-07 00:00:00.000 N/A 
030700630 2014-01-10 00:00:00.000 N/A 
030700630 2014-01-10 00:00:00.000 N/A 
030700620 2014-01-15 00:00:00.000 N/A 
030700620 2014-01-15 00:00:00.000 N/A 
030700620 2014-01-15 00:00:00.000 N/A 
030700620 2014-01-15 00:00:00.000 N/A 
030700620 2014-01-15 00:00:00.000 N/A 
030700630 2014-01-10 00:00:00.000 N/A 
030700630 2014-01-10 00:00:00.000 N/A 

일하고 코드 : AsbestotosUPRN이 고유

select 
    AsbestosUPRN, 
    min(OverallRiskCategory) as OverallRiskCategory, 
    max(SurveyDate) as SurveyDate 
FROM TblAsbestos 
GROUP BY 
    AsbestosUPRN 
+0

이 좀 더 명확 수 있습니다 당신은 [sqlfiddle] (HTTP의 일부 샘플 데이터로 스키마를 조롱하는 경우 : // sqlfiddle.com). 예상 출력을 기록해 두십시오. – paqogomez

답변

1

을 내가 질문을 이해한다면 올바르게의 UPRN에 대한 가장 최근의 설문 조사 날짜와 UPRN을 원하는 UPRN/일에서 가장 높은 위험 분류 콤비네이션. 그게 당신이 원하는 경우 다음 SQL 코드가 작동합니다.

WITH md AS (
    SELECT AsbestosUPRN, Max(SurveyDate) AS maxdate 
    FROM TblAsbestos 
    GROUP BY AsbestosUPRN 
    ) 
SELECT md.AsbestosUPRN, maxdate, Max(overallriskcategory) AS maxrisk 
FROM md, TblAsbestos t 
WHERE md.AsbestosUPRN = t.AsbestosUPRN AND 
    md.maxdate = t.surveydate 
GROUP BY md.AsbestosUPRN, maxdate; 

N/A 데이터가 실제로 데이터베이스에서 NULL 인 경우에만 작동합니다. 그렇지 않으면 max (overallriskcategory)는 '가장 높은'문자열이기 때문에 항상 'N/A'를 반환합니다. 다음을 NULL로 'N/A'를 변환해야하는 경우 작동합니다 :

UPDATE tblasbestos 
SET overallriskcategory = NULL 
WHERE overallriskcategory = 'N/A'; 
+0

답변으로 표시 내가 한 것은 산출물이 올바른지 확인하기 위해 Overallriskcategory에 대한 숫자 값을 만드는 것입니다. – indofraiser

1

경우, 모든 하나 개의 테이블 내에서 할 수 없습니다. 난 당신이 다음 표했다고 가정 :

UPRN OverallRiskCategory SurveyDate 
    1    2   1/1/14 
    1    5   1/2/14 
    1    3   1/3/14 
    2    7   1/1/14 

그리고이 같은 싶지 :

UPRN OverallRiskCategory 
    1    5  
    2    7 

권리를?

다음, 당신은 집계 기능을 작동합니다 :

SELECT UPRN, max(OverallRiskCategoy) 
FROM Tbl 
GROUP BY UPRN 
+0

슬프게도 Unique가 아니기 때문에 쉽지 않을 것입니다 .-- ( – indofraiser

+0

예제 데이터를 추가했습니다. – indofraiser

+0

샘플 데이터에 예상 결과를 추가 할 수 있습니까? 이것은 달성하려는 내용을 이해하는 데 도움이됩니다. –