2014-11-25 5 views
1

그냥 데이터베이스에서 마지막 데이터를 가져 오기 위해 MS SQL 문을 작성하려고합니다. 불행히도 거기에 DESC LIMIT 1을 추가하면 나에게 잘 보이는 것처럼 보이지만 잘못된 구문이 표시됩니다.MS SQL 마지막 레코드

더 많은 기술을 가진 사람이 그것을 볼 수 있습니까? 본이 작업 LIKE

Select 
    sum(spareparts), 
    month(calculationdate) 
from cz_axnmrs_calculations 
where CASE_ID in (select case_id 
        from cz_axnmrs_cases 
        where insurer_memberid = 'MM-O-5B57274F') 
and YEAR(calculationdate)='2014' 
group by month(calculationdate) DESC LIMIT 1 

:

Select 
    sum(spareparts), 
    month(calculationdate) 
from cz_axnmrs_calculations 
where CASE_ID in (select case_id 
        from cz_axnmrs_cases 
        where insurer_memberid = 'MM-O-5B57274F') 
and YEAR(calculationdate)='2014' 
group by month(calculationdate) 
+1

@Matt : 게시물을 편집하는 경우 모든 사항을 수정해야합니다. 편집 - 검토 자의 시간을 소중히 여깁니다. –

+1

"내가보기 엔 귀찮은 구문을 완전히 무시하는 것"처럼 "나에게 도움이 되는가?" – TomTom

+0

@juergend Yeh 죄송합니다, 일반 텍스트를 놓쳤습니다. 코드를 정리하고 질문에 먼저 대답하고 싶습니다. – Matt

답변

4

SQL 서버 레코드의 수를 제한하는 TOP 대신 LIMIT 사용합니다.

귀하의 질의는된다 : SQL 서버 2012+에서

Select top 1 
    sum(spareparts), 
    month(calculationdate) 
from cz_axnmrs_calculations 
where CASE_ID in (select case_id 
        from cz_axnmrs_cases 
        where insurer_memberid = 'MM-O-5B57274F') 
and YEAR(calculationdate)='2014' 
group by month(calculationdate) DESC 
+0

두 번째 질문이 있으면 질문이 하나 더 생길 수 있습니다. 지금 모든 케이스에서 LAST SUM 및 MONTH를 선택합니다. 그러나 모든 경우의 마지막 계산에서 합계를 계산하면 어떨까요? 그래서 결과는 TOP와 같지만 숫자가 작습니다 (모든 계산을 포함하지 않기 때문에) – Andurit

+0

'모든 사례에서 마지막 계산'이 무슨 뜻인지 이해하지 못합니다. [바이올린] (http://sqlfiddle.com)을 예제 데이터와 함께 입력하고 원하는 출력으로 질문을 게시하십시오. – paqogomez

+0

바이올린은 일시적으로 사용할 수 없습니다. 이 코드가 무엇을하는지 (TOP1을 제거하면) 모든 예비 부품을 가져 와서 (합계) 계산합니다.하지만 모든 부품 대신 마지막 예비 부품을 얻고 싶습니다. – Andurit

1
Select TOP 1 sum(spareparts), month(calculationdate) from cz_axnmrs_calculations 
WHERE CASE_ID in (select case_id 
FROM cz_axnmrs_cases WHERE insurer_memberid = 'MM-O-5B57274F') AND YEAR(calculationdate)='2014' 
GROUP BY month(calculationdate) 
2

는, 마이크로 소프트가 ANSI 표준 OFFSET 절을 지원합니다. 다음과 같이 작성할 수 있습니다.

Select sum(spareparts), month(calculationdate) 
from cz_axnmrs_calculations 
where CASE_ID in (select case_id from cz_axnmrs_cases where insurer_memberid = 'MM-O-5B57274F') and 
     YEAR(calculationdate)='2014' 
group by month(calculationdate) DESC 
fetch first 1 row only;