最大日期之后的数据



i正在将数据加载到表中。我没有任何有关加载源数据的频率或何时加载的信息,我所知道的是我需要来自源的数据才能运行脚本。

这是问题,如果我运行最大(日期(,我会从源获得最新日期,但是我不知道数据是否仍在加载。我遇到了我只有一定比例的数据的情况。因此,我需要最大约会之后的下一个工作日。

我想知道是否有一种方法可以在系统中获得第二个最新日期。我知道我可以得到最大(日期(-1,但这在第二天就给了我。我不需要以后的一天。

示例,如果我在星期二运行脚本,最大(日期(将是星期一,但是由于周末不在源系统中,我需要获得星期五而不是星期一。

DATE
---------
2017-04-29
2017-04-25
2017-04-21
2017-04-19
2017-04-18
2017-04-15
2017-04-10
max(date) = 2017-04-29

我如何获得2017-04-25?

根据您的SQL Server版本,您可以使用row_number

之类的窗口功能
select [Date]
from
(
  select [Date],
    rn = row_number() over(order by [Date] desc)
  from #yourtable
) d
where rn = 2

这是一个演示。

如果您有相同日期的多个,则可以先执行distinct

;with cte as
(
  select distinct [date]
  from #yourtable
)
select [date]
from
(
  select [date],
    rn = row_number() over(order by [date] desc)
  from cte
) x
where rn = 2;

您可以使用row_number并获得第二名

select * from ( select *, Rown= row_number() over (order by date desc) from yourtable ) a
   where a.RowN = 2

更多最新的SQL Server版本支持FETCH FIRST

select date
from tablename
order by date desc
offset 1 fetch first 1 row only

OFFSET 1表示跳过一行。(2017-04-29行。(

;With cte([DATE])
AS
(
SELECT '2017-04-29' union all
SELECT '2017-04-25' union all
SELECT '2017-04-21' union all
SELECT '2017-04-19' union all
SELECT '2017-04-18' union all
SELECT '2017-04-15' union all
SELECT '2017-04-10' 
)
SELECT [DATE] FROM
(
SELECT *,ROW_NUMBER()OVER(ORDER BY Seq)-1 As Rno FROM
(
SELECT *,MAX([DATE])OVER(ORDER BY (SELECT NULL))Seq FROM cte
)dt
)Final
WHERE Final.Rno=1

输出

DATE
-----
2017-04-25

您也可以将first_value与Dynamic Date一样使用DATEADD(dd,-1,getDate(((。下面的示例具有硬编码日期。

SELECT DISTINCT
    FIRST_VALUE([date]) OVER(ORDER BY [date] DESC) AS FirstDate
FROM CTE 
WHERE [date] < '2017-04-25'

另一种方式

DECLARE @T TABLE ([DATE] DATE)
INSERT INTO @T VALUES
('2017-04-29'),
('2017-04-25'),
('2017-04-21'),
('2017-04-19'),
('2017-04-18'),
('2017-04-15'),
('2017-04-10');
SELECT

MAX([DATE]) AS [DATE]
FROM @T
WHERE  DATENAME(DW,[DATE]) NOT IN ('Saturday','Sunday')

另一种做法的方式,只是为了提示...

SELECT MIN(A.date)
FROM
(
SELECT  TOP 2 DISTINCT date
FROM    YourTable AS C
ORDER BY date DESC
) AS A

相关内容

  • 没有找到相关文章

最新更新