需要一个 SQL select 查询,其中的行列仅在行的 id 列唯一时递增

Needed a SQL select query, with a row column which is incremented only when a row's id column is unique

给定一个 table:

#  Id           Val
1  1111111111   Andre
2  1111111111   Bart
3  1111111111   Corry
4  2222222222   Donald
5  2222222222   Eric
6  3333333333   Fiona

我想 select table 有一个指标:对具有相同 id 的行进行分组,即得到类似的东西:

#  Id           Val
1  1111111111   Andre
1  1111111111   Bart
1  1111111111   Corry
2  2222222222   Donald
2  2222222222   Eric
3  3333333333   Fiona

在此我想出了解决方案:

SELECT 
(
  row_number() OVER (ORDER BY id) - row_number() OVER (PARTITION BY id ORDER BY id) + 1
) nGroupedToRow,
row_number() OVER (ORDER BY id) nRow,
row_number() OVER (PARTITION BY id ORDER BY id) nNumDupl,
   id, 
   val 
FROM table1  

产生:

nGroupedToRow nRow  nNumDupl Id           Val
1             1     1        1111111111   Andre
1             2     2        1111111111   Bart
1             3     3        1111111111   Corry
4             4     1        2222222222   Donald
4             5     2        2222222222   Eric
6             6     1        3333333333   Fiona

认为这可能对某人有所帮助……也许有人可以改进它……也许有人问过类似的问题,但我找不到它,尽管关于堆栈溢出的其他解决方案将我引向了这个问题。 ..

http://sqlfiddle.com/#!18/b52aba/1

SELECT 
(
  row_number() OVER (ORDER BY id) - row_number() 
               OVER (PARTITION BY id ORDER BY id) + 1
) nGroupedToRow,
    row_number() OVER (ORDER BY id) nRow,
    row_number() OVER (PARTITION BY id ORDER BY id) nNumDupl,
    id, 
    val 
FROM table1  

http://sqlfiddle.com/#!18/b52aba/1