@@ -434,6 +434,77 @@ public void SingleTablePartitionBy()
434434 Assert . Equal ( list01 [ 2 ] . item . Nickname , "name03" ) ;
435435
436436
437+ var sql0111 = fsql . Select < SingleTablePartitionBy_User > ( )
438+ . WithTempQuery ( a => new
439+ {
440+ item = a ,
441+ rownum = SqlExt . RowNumber ( ) . Over ( ) . PartitionBy ( a . Nickname ) . OrderBy ( a . Id ) . ToValue ( )
442+ } )
443+ . Where ( a => a . rownum == 1 )
444+ . UnionAll (
445+ fsql . Select < SingleTablePartitionBy_User > ( )
446+ . WithTempQuery ( a => new
447+ {
448+ item = a ,
449+ rownum = SqlExt . RowNumber ( ) . Over ( ) . PartitionBy ( a . Nickname ) . OrderByDescending ( a . Id ) . ToValue ( )
450+ } )
451+ . Where ( a => a . rownum == 2 )
452+ )
453+ . Where ( a => a . rownum == 1 || a . rownum == 2 )
454+ . ToSql ( ) ;
455+ var assertSql0111 = @"SELECT *
456+ FROM ( SELECT *
457+ FROM (
458+ SELECT a.[Id], a.[Nickname], row_number() over( partition by a.[Nickname] order by a.[Id]) [rownum]
459+ FROM [SingleTablePartitionBy_User] a ) a
460+ WHERE (a.[rownum] = 1)
461+ UNION ALL
462+ SELECT *
463+ FROM (
464+ SELECT a.[Id], a.[Nickname], row_number() over( partition by a.[Nickname] order by a.[Id] desc) [rownum]
465+ FROM [SingleTablePartitionBy_User] a ) a
466+ WHERE (a.[rownum] = 2) ) a
467+ WHERE ((a.[rownum] = 1 OR a.[rownum] = 2))" ;
468+ Assert . Equal ( assertSql0111 , sql0111 ) ;
469+
470+ var sel0111 = fsql . Select < SingleTablePartitionBy_User > ( )
471+ . WithTempQuery ( a => new
472+ {
473+ item = a ,
474+ rownum = SqlExt . RowNumber ( ) . Over ( ) . PartitionBy ( a . Nickname ) . OrderBy ( a . Id ) . ToValue ( )
475+ } )
476+ . Where ( a => a . rownum == 1 )
477+ . UnionAll (
478+ fsql . Select < SingleTablePartitionBy_User > ( )
479+ . WithTempQuery ( a => new
480+ {
481+ item = a ,
482+ rownum = SqlExt . RowNumber ( ) . Over ( ) . PartitionBy ( a . Nickname ) . OrderByDescending ( a . Id ) . ToValue ( )
483+ } )
484+ . Where ( a => a . rownum == 2 )
485+ )
486+ . Where ( a => a . rownum == 1 || a . rownum == 2 ) ;
487+ Assert . Equal ( assertSql0111 , sel0111 . ToSql ( ) ) ;
488+
489+ var list0111 = sel0111 . ToList ( ) ;
490+ Assert . Equal ( 5 , list0111 . Count ) ;
491+ Assert . Equal ( list0111 [ 0 ] . rownum , 1 ) ;
492+ Assert . Equal ( list0111 [ 0 ] . item . Id , 1 ) ;
493+ Assert . Equal ( list0111 [ 0 ] . item . Nickname , "name01" ) ;
494+ Assert . Equal ( list0111 [ 1 ] . rownum , 1 ) ;
495+ Assert . Equal ( list0111 [ 1 ] . item . Id , 4 ) ;
496+ Assert . Equal ( list0111 [ 1 ] . item . Nickname , "name02" ) ;
497+ Assert . Equal ( list0111 [ 2 ] . rownum , 1 ) ;
498+ Assert . Equal ( list0111 [ 2 ] . item . Id , 5 ) ;
499+ Assert . Equal ( list0111 [ 2 ] . item . Nickname , "name03" ) ;
500+ Assert . Equal ( list0111 [ 3 ] . rownum , 2 ) ;
501+ Assert . Equal ( list0111 [ 3 ] . item . Id , 2 ) ;
502+ Assert . Equal ( list0111 [ 3 ] . item . Nickname , "name01" ) ;
503+ Assert . Equal ( list0111 [ 4 ] . rownum , 2 ) ;
504+ Assert . Equal ( list0111 [ 4 ] . item . Id , 5 ) ;
505+ Assert . Equal ( list0111 [ 4 ] . item . Nickname , "name03" ) ;
506+
507+
437508 var sql011 = fsql . Select < SingleTablePartitionBy_User > ( )
438509 . GroupBy ( a => a . Nickname )
439510 . WithTempQuery ( g => new { min = g . Min ( g . Value . Id ) } )
0 commit comments