2012-01-19 6 views
0

shipwynumconvertship 테이블의 기본 키입니다.groupby 연도 별 쿼리

사실이 쿼리는 2008 년 동안 데이터를 올바르게 가져옵니다. 2008 년을 다른 연도로 대체하면 해당 년도의 데이터도 정확합니다. 이 쿼리는 TotalCount이 아닌 해당 연도의 총 레코드를 표시합니다. TotalCount은 항상 하나의 becoz를 가지고 있습니다. 나는 shipwynum과 (과) 같은 그룹을 가지고 있습니다.
하지만이 쿼리에서는 1000에서 2011까지 별도로 (2008 년과 같은 특정 연도) 데이터를 가져오고 TotalCount은 매년 카운트를 표시해야합니다. =

select 
    distinct 
    count(con.shipwynum) as TotalCount, 
    con.shipwynum, 
    s.deldat, 
    s.deldat as DeliveryQuarter, 
    left(s.deldat,4) as DelYear 
    from convertship con 
    left join shipscheduled s on con.shipwynum = s.shipwynum and s.deleted = 'N' 
    where left(s.deldat,4) > 1000 and left(s.deldat,4) <= 2008 and 
    left(con.condat,4) > 2008 and 
    con.deleted = 'N' and 
    con.wytypid in ('66', '10', '11', '12', '13', '14', '15', '16', '17','18') and 
    s.wytypid not in ('66', '10', '11', '12', '13', '14', '15', '16', '17','18') 
    group by con.shipwynum 

어떤 도움이나 아이디어가 크게 감상 할 수있다 :

나는이 쿼리가 있습니다.

고마워요.

+1

나는 당신의 질문이 무엇인지 모르십니까 ?? –

+0

이해할 수없는 내용 은요? – Bajrang

답변

0

나는 매년 행 수를 계산하려고한다고 생각하십니까? 내가 가정 것과

,
한 기본 테이블 convertship이 당신은 shipscheduledconvertship에 가입 할 수 있습니다.
그런 다음 데이터를 left(con.condat,4) 값에 따라 그룹화하십시오.

select distinct  
    count(con.shipwynum) as TotalCount,  
    con.shipwynum,  
    s.deldat,  
    s.deldat as DeliveryQuarter,  
    left(s.deldat,4) as DelYear, 
    left(con.condat,4) as ConYear 
from 
    convertship con  
inner join 
    shipscheduled s on con.shipwynum = s.shipwynum 
where 
    left(s.deldat,4) > 1000 and 
    left(s.deldat,4) <= 2008 and  
    -- left(con.condat,4) > 2008 and  
    con.deleted = 'N' and  
    s.deleted = 'N' and 
    con.wytypid in ('66','10','11','12','13','14','15','16','17','18') and  
    s.wytypid not in ('66','10','11','12','13','14','15','16','17','18')  
group by 
    left(con.condat,4) 

convertship 테이블이 너무 크지 않다고 가정합니다. 그렇지 않으면 작동하지 않습니다.

+1

mysql은 YEAR이 더 좋을 때 LEFT를 사용하는 이유는 무엇보다 –

+0

이고'left join '은'where' 조건에 의해 실제로 취소된다. 'inner join'으로 대체 할 수 있습니다. –

+0

귀하의 코멘트를 제거하고 '왼쪽 (s.deldat, 4)> 1000 및 (s.deldat, 4) <= 2002 및 왼쪽 (con.condat, 4)> 2002 및' 2002 년 6 건이 기록되어 있습니다.하지만 귀하의 질의에는 ConYear 2002에 대한 TotalCounts가 단 하나뿐입니다. – Bajrang

0

보십시오합니다 (DelYear 이내) 및 deldat DeliveryQuarter가 어느 것에 의해서도 그룹화하지 않고 응집되어 있기 때문에, 출력에서의 값은 본질적으로 임의의 것이라고

select count(con.shipwynum) as TotalCount, 
     con.shipwynum, 
     s.deldat, 
     s.deldat as DeliveryQuarter, 
     left(s.deldat,4) as DelYear 
from convertship con 
left join shipscheduled s 
     on con.shipwynum = s.shipwynum and 
      s.deleted = 'N' and 
      left(s.deldat,4) > 1000 and 
      left(s.deldat,4) < left(con.condat,4) and 
      s.wytypid not in ('66', '10', '11', '12', '13', '14', '15', '16', '17','18') 
where con.deleted = 'N' and 
     con.wytypid in ('66', '10', '11', '12', '13', '14', '15', '16', '17','18') and 
group by con.shipwynum, left(s.deldat,4) 

참고.