如何使用MAX-N执行MAX SQL语句

时间:2017-10-30 18:29:25

标签: sql greatest-n-per-group

我正在寻找一些SQL帮助,因为我对它有些新意。我有80%的等式,但我错过了最后二十个。

我正在尝试使用N变量执行MAX语句。我每周都会将一个文件加载到服务器,并且该文件有一个' etl date'。我想说'根据日期'向我展示最近的3个文件。我想出了如何在这个论坛上获得最近的两个

SELECT COUNT (ref_date)
FROM [STORAGE_DW].[dbo].[SRM_VirtualMachines]
WHERE ref_date = (SELECT MAX(ref_date) 
                  FROM [STORAGE_DW].[dbo].[SRM_VirtualMachines])

SELECT COUNT (ref_date)
FROM [STORAGE_DW].[dbo].[SRM_VirtualMachines]
WHERE ref_date = (SELECT MAX(ref_date) 
                  FROM [STORAGE_DW].[dbo].[SRM_VirtualMachines]
                  WHERE Ref_Date < (SELECT MAX(ref_date) 
                                    FROM STORAGE_DW.dbo.SRM_VirtualMachines))

我不确定上述内容是否有效但是有效。我基本上想说给我看一下最近的文件日期(MAX),然后是两个以前的MAX-2。

日期格式如下:

2017-01-30 07:03:00.000

1 个答案:

答案 0 :(得分:1)

通过查看您的问题,我假设您使用的是SQL Server。您可以使用RANK Analytic函数从表中获取所有最新三个参考日期的计数。检查解决方案如下。

SELECT COUNT( Z.ref_date )
  FROM
  ( 
    SELECT *,
           RANK() OVER( ORDER BY ref_date DESC ) AS rnk
      FROM [STORAGE_DW].[dbo].[SRM_VirtualMachines]
   ) Z
 WHERE Z.rnk <=3;