2012-01-19 11 views
0

shipwynumconvertshipテーブルの主キーです。グループ別クエリ

実際には、このクエリはデータを正しく取得しています(2008年のみ)。 2008年を他の年に置き換えると、その年のデータも正しくなります。このクエリは、その年の合計レコードをTotalCountに表示しません。 TotalCountは常にbecozを1つ持っています。私はshipwynumでグループを持っています。
しかし、この1つのクエリでは、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

あなたは毎年の行数をカウントしようとしていると思いますか?私が想定したものから


は1つのメインテーブル 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

あなたのコメントを削除して 'left(s.deldat、4)> 1000と (s.deldat、4)<= 2002と (con.condat、4)> 2002となりました2002年の6件の記録です。しかし、あなたの質問では、ConYear 2002のTotalCountsは1つしかありません。 – Bajrang

0

試行:

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) 

注deldatとDeliveryQuarterがどちらによってグループ化も凝集しているため、出力におけるそれらの値は、本質的に(DelYear内で)ランダムになること。