计算并获得每个行成员的最大值

时间:2012-05-07 04:32:35

标签: sql

我正在尝试建立一个查询来计算哪个组织每个区每个区的人员出勤率最高? 条款: “区”和“loinum”意思相同。马萨诸塞州有31个区。 “Org”是一个地方分会,在其中一个区。 “官员”是通过“TY”命名为“WM”的职位。 表是

loinum month   year  org  wm sw jw  ty
1        8     2011  Ma   0   1  1  1 
1        9     2011  CA   1   1  0  0 
1        8     2011  La   1   0  0  1 
2        7     2011  ME   1   1  1  1
2        6     2011  io   1   0  0  0  
2        9     2011  BO   1   0  0  0 
3        5     2011  Ch   1   1  1  1
3        4     2011  AL   0   0  0  1   
3        4     2011  EG   0   1  1  0

我如何计算并获得每个月和每个月的最大值?

1 个答案:

答案 0 :(得分:2)

这是一个通用的解决方案,但对于特定的DB,可能会有更好的解决方案。创建一个内联视图,获取每个loinum,month和year的最大值。然后将它连接回主表。

注意:如果最大值达到平局,则给定的loinum,月份和年份将有多个结果

SELECT t.* 
FROM   table1 t 
       INNER JOIN (SELECT loinum, 
                          month, 
                          year, 
                          Max(wm + sw + jw + ty) oCount 
                   FROM   table1 
                   GROUP  BY loinum, 
                             month, 
                             year) AS MAX 
         ON t.loinum = max.loinum 
            AND t.month = max.month 
            AND t.year = max.year 
            AND ( wm + sw + jw + ty ) = max.oCount

DEMO

结果

LOINUM  MONTH   YEAR    ORG WM  SW  JW  TY
1           8   2011    Ma  0   1   1   1
1           9   2011    CA  1   1   0   0
2           6   2011    io  1   0   0   0
2           7   2011    ME  1   1   1   1
2           9   2011    BO  1   0   0   0
3           4   2011    EG  0   1   1   0
3           5   2011    Ch  1   1   1   1