繁体   English   中英

如何只获取最大行数的记录?

[英]How to get only the max row number row of record?

下面的查询结果记录如下..

如何只获取最大行数的记录? 我已经对该查询进行了20,000条记录的查询,以识别重复项并获取最新日期及其处理的数量(RowNumber)。

select [FileName], ProcessDate,
ROW_NUMBER() over (partition by [FileName] order by [FileName] desc) RowNumber 
from  StagingTable
where filename = 'abc.txt'

在此处输入图片说明

您在寻找过滤器吗?

select s.*
from (select [FileName], ProcessDate,
             ROW_NUMBER() over (partition by [FileName] order by ProcessDate desc) as RowNumber 
      from StagingTable
      where filename = 'abc.txt'
     ) s
where RowNumber = 1;

请注意, ORDER BY已更改。

如果还需要总数,则添加,然后作为附加列:

select s.*
from (select [FileName], ProcessDate,
             count(*) over (partition by filename) as cnt,
             ROW_NUMBER() over (partition by [FileName] order by ProcessDate desc) as RowNumber 
      from StagingTable
      where filename = 'abc.txt'
     ) s
where RowNumber = 1;

根据您的逻辑,似乎没有最大的行数。 还是行号绑定到ProcessDate以外的其他字段?

据我了解您的问题,我将使用以下查询:

SELECT [FileName], MAX([ProcessDate]) AS [ProcessDate], COUNT(*) AS [Count]
FROM [StagingTable]
GROUP BY [FileName]

您的查询有一个错误:在OrderBy您编写了FileName,但是我想您使用的是日期。

您可以在ROW_NUMBER()列上加倍:

WITH VersionSorting AS (
  select
    [FileName],
    ProcessDate,
    ROW_NUMBER() over (partition by [FileName] order by [ProcessDate] ASC) FileVersion,
    ROW_NUMBER() over (partition by [FileName] order by [ProcessDate] DESC) FileVersionInv
  from  StagingTable
)
SELECT FileName, ProcessDate, FileVersion
FROM VersionSorting
WHERE FileVersionInv = 1
-- AND FileName = 'abc.txt' 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM