Tsql 如何根据日期获得正行和负行
我正试图从表中获取当前日期。此查询符合我的要求,但似乎有些过分:Tsql 如何根据日期获得正行和负行,tsql,Tsql,我正试图从表中获取当前日期。此查询符合我的要求,但似乎有些过分: WITH dates AS (SELECT Month, FQ, FY, MonthDisplay, CAST (datepart(yyyy, [Month]) AS VARCHAR) + '-' + RIGHT(CAST ((datepart(MM, [Month]) + 1
WITH dates
AS (SELECT Month,
FQ,
FY,
MonthDisplay,
CAST (datepart(yyyy, [Month]) AS VARCHAR) + '-' + RIGHT(CAST ((datepart(MM, [Month]) + 100) AS VARCHAR), 2) AS YM,
fh,
LEFT(CONVERT (VARCHAR, [Month], 100), 3) + ' ' + RIGHT(fy, 4) AS MY,
LEFT(CONVERT (VARCHAR, [Month], 100), 3) AS ShortMonthName
FROM Pipeline.DimTime AS dt),
datesafter
AS (SELECT dt.FH,
dt.FQ,
dt.FY,
dt.MY,
dt.Month,
dt.MonthDisplay,
dt.ShortMonthName,
dt.YM,
ROW_NUMBER() OVER ( ORDER BY [Month]) AS RowNum
FROM dates AS dt
WHERE dt.[Month] >= (SELECT TOP 1 DATEADD(MONTH, DATEDIFF(MONTH, 0, ds.SnapshotDate), 0)
FROM dbo.vw_DimSnapshot AS ds
WHERE ds.SnapshotWeek = 'Current')),
datesbefore
AS (SELECT dt.FH,
dt.FQ,
dt.FY,
dt.MY,
dt.Month,
dt.MonthDisplay,
dt.ShortMonthName,
dt.YM,
(ROW_NUMBER() OVER ( ORDER BY [Month] DESC)) * -1 AS RowNum
FROM dates AS dt
WHERE dt.[Month] < (SELECT TOP 1 DATEADD(MONTH, DATEDIFF(MONTH, 0, ds.SnapshotDate), 0)
FROM dbo.vw_DimSnapshot AS ds
WHERE ds.SnapshotWeek = 'Current'))
SELECT *
FROM datesafter
UNION ALL
SELECT *
FROM datesbefore
ORDER BY [month];
我认为您可以使用datediff在单个查询中完成这项工作。将当前日期作为一个参数传递,将表日期作为另一个参数传递。如果您可以跳过丢失的日期,这将起作用。例如,如果当前日期为11月21日,则11月20日将显示为-1,11月18日将显示为-3,即使数据中缺少11月19日。我不确定您的业务需求是什么,因此无法对此发表评论 顺便说一句,如果您正在寻找基于月而不是日的条例,您仍然可以使用datediff,但使用正确的datepart请参见: 嗯。
-Tabrez您可以通过datetime类型变量进行订购,该变量将按照日期值进行订购