按年份查询分组

时间:2012-01-19 06:01:00

标签: mysql sql group-by

shipwynumconvertship表的主键。

实际上这个查询只能获得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

非常感谢任何帮助或想法。

非常感谢。

2 个答案:

答案 0 :(得分:0)

我认为你是在尝试计算每年的行数?

从我的假设,
有一个主要表convertship,您希望将convertship加入shipscheduled 然后根据其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 :(得分: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中)。