如何获取按sql中的ID分组的最大行数

时间:2015-07-24 13:57:21

标签: sql sql-server select filter group-by

说我有这张桌子: (列:Row是基于列ID

的计数
ID  | Row  | State | 
1   | 1    | CA    |
1   | 2    | AK    |
2   | 1    | KY    |
2   | 2    | GA    |
2   | 3    | FL    |
3   | 1    | WY    |
3   | 2    | HI    |
3   | 3    | NY    |
3   | 4    | DC    |
4   | 1    | RI    |

我想生成一个新列,其中每列Row列的ID列的编号最高。我怎么做到这一点?我一直在搞乱MAX(),GROUP BY和一些分区,但每次都会遇到不同的错误。很难正确地解决这个问题。这是我的目标输出:

ID  | Row  | State | MaxRow
1   | 1    | CA    | 2
1   | 2    | AK    | 2
2   | 1    | KY    | 3
2   | 2    | GA    | 3
2   | 3    | FL    | 3
3   | 1    | WY    | 4
3   | 2    | HI    | 4
3   | 3    | NY    | 4
3   | 4    | DC    | 4
4   | 1    | RI    | 1

3 个答案:

答案 0 :(得分:10)

使用MAX的窗口版本:

SELECT ID, Row, State, MAX(Row) OVER (PARTITION BY ID) AS MaxRow
FROM mytable

Demo here

答案 1 :(得分:2)

您可以在表上的查询和聚合表之间加入:

SELECT t.*, max_row
FROM   t
JOIN   (SELECT   id, MAX([row]) AS max_row
        FROM     t
        GROUP BY id) agg ON t.id = agg.id

答案 2 :(得分:1)

您可以首先使用group by id和max创建查询以获取最高编号。然后将此查询用作子查询,并使用id进行内连接。

然后使用子查询中的最大列来获取最终结果。