SQL Over_rumber 分组依据

SQL Over_rumber on group by

这是我的输出。

Prod_ Order No_  | Old Item No_ | Quantity | Control Date
     2001            KR2000001      20          2016-08-22
     2001            KR2000001      20          2016-08-22
     2001            KR2000001      20          2016-08-22
     2001            KR2000001      20          2016-08-22
     3001            KR3000001      25          2016-08-22
     3001            KR3000001      25          2016-08-22

这是我的 sql.

SELECT * FROM 
    (
        SELECT ROW_NUMBER() OVER (PARTITION BY [Prod_ Order No_] ORDER BY [Prod_ Order No_] DESC) AS rn,
                main.[Prod_ Order No_], items.[Old Item No_], main.[Item No_], main.Quantity, main.[Control Date] , main.[Control Rate],
                main.[Ok Red], main.[Defect Desc], main.[State And Solve], main.[Location Code], main.[Description],
                [Item Shipment Date], main.[Final Parti No_], main.[Produced By Users], main.[Renk]
            FROM [Zenon data$Final Quality Control]  AS main
            JOIN [Zenon data$Item] AS items ON items.No_= main.[Item No_]
            JOIN [Zenon data$Production Entry] AS pe ON pe.[Prod_ Order No] = main.[Prod_ Order No_]            
    ) AS ax
WHERE rn > 0 AND rn < =20

我想要这个输出,但我做不到。

Prod_ Order No_  | Old Item No_ | Quantity | Control Date
     2001            KR2000001      20          2016-08-22
     3001            KR3000001      25          2016-08-22

我的主要 table 是最终质量控制。主键 => 产品订单号_

你的意思是这样的?

SELECT * FROM 
(
    SELECT ROW_NUMBER() OVER (PARTITION BY [Prod_ Order No_] ORDER BY [Prod_ Order No_] DESC) AS rn,
    main.[Prod_ Order No_], items.[Old Item No_], main.[Item No_], main.Quantity, main.[Control Date] , main.[Control Rate],
    main.[Ok Red], main.[Defect Desc], main.[State And Solve], main.[Location Code], main.[Description],
    [Item Shipment Date], main.[Final Parti No_], main.[Produced By Users], main.[Renk]
    FROM [Zenon data$Final Quality Control]  AS main
    JOIN [Zenon data$Item] AS items ON items.No_= main.[Item No_]
    JOIN [Zenon data$Production Entry] AS pe ON pe.[Prod_ Order No] = main.[Prod_ Order No_]
) AS ax
WHERE rn > 0 AND rn < =20
GROUP BY 1, 2, 4
  select * from (
          SELECT ax.*, ROW_NUMBER() OVER (PARTITION BY [Prod_ Order No_]  ORDER BY [Prod_ Order No_] DESC) AS rnpage,

          FROM 
                    (
                        SELECT  
                        ROW_NUMBER() OVER (PARTITION BY [Prod_ Order No_] ORDER BY [Prod_ Order No_] DESC) AS rn,
                             main.[Prod_ Order No_], items.[Old Item No_], main.[Item No_], main.Quantity, main.[Control Date] , main.[Control Rate],
                             main.[Ok Red], main.[Defect Desc], main.[State And Solve], main.[Location Code], main.[Description],
                              [Item Shipment Date], main.[Final Parti No_], main.[Produced By Users], main.[Renk]
                                    FROM [Zenon data$Final Quality Control]  AS main
                                    JOIN [Zenon data$Item] AS items ON items.No_= main.[Item No_]
                                    JOIN [Zenon data$Production Entry] AS pe ON pe.[Prod_ Order No] = main.[Prod_ Order No_]

                    ) AS ax
          WHERE rn=1

  ) ax2 where rnpage between 1 and 20 

对于分页,使用 Offset 和 fetch。只需更改分页的偏移量和获取值即可。

SELECT * FROM 
(
SELECT ROW_NUMBER() OVER (PARTITION BY [Prod_ Order No_] ORDER BY [Prod_ Order No_] DESC) AS rn,
main.[Prod_ Order No_], items.[Old Item No_], main.[Item No_], main.Quantity, main.[Control Date] , main.[Control Rate],
main.[Ok Red], main.[Defect Desc], main.[State And Solve], main.[Location Code], main.[Description],
[Item Shipment Date], main.[Final Parti No_], main.[Produced By Users], main.[Renk]
FROM [Zenon data$Final Quality Control]  AS main
JOIN [Zenon data$Item] AS items ON items.No_= main.[Item No_]
JOIN [Zenon data$Production Entry] AS pe ON pe.[Prod_ Order No] = main.[Prod_ Order No_]

) AS ax
ORDER BY rn
OFFSET 0 ROWS FETCH NEXT 20 ROWS ONLY