Sql server T-SQL查询以比较日期并查找列条目是否存在一个月

Sql server T-SQL查询以比较日期并查找列条目是否存在一个月,sql-server,tsql,Sql Server,Tsql,我有两列,分别是“对账单日期”和“账号”。对于某些账号,报表每月上载一次,对于某些季度,对于某些年度,这些报表上载的日期保存在报表日期中 我想检查是否上传了特定的语句。 例如,对于账号2345426576报表日期2016年5月30日,我必须检查是否有2016年4月30日前一个月和2016年6月30日下一个月的条目。如果条目不存在,则应返回该月的缺失 如果要比较不同表的日期,然后查找是否缺少语句。例如,如果t1.date>t2.date,则检查t1.date是否大于多少个月。如果t1.date为此

我有两列,分别是“对账单日期”和“账号”。对于某些账号,报表每月上载一次,对于某些季度,对于某些年度,这些报表上载的日期保存在报表日期中

我想检查是否上传了特定的语句。 例如,对于账号2345426576报表日期2016年5月30日,我必须检查是否有2016年4月30日前一个月和2016年6月30日下一个月的条目。如果条目不存在,则应返回该月的缺失


如果要比较不同表的日期,然后查找是否缺少语句。例如,如果t1.date>t2.date,则检查t1.date是否大于多少个月。如果t1.date为此创建一个函数,情况也是如此:

CREATE FUNCTION [dbo].[IsUploaded]
(
       @AccountNo int,
       @Date datetime
)
RETURNS bit
AS
BEGIN
    DECLARE @MonthStart datetime
    DECLARE @NextMonthStart datetime


    -- current month 
   SET @MonthStart = DATEADD(month, DATEDIFF(month, 0, @Date), 0)
   SET @NextMonthStart = DATEADD(month, 1, @MonthStart)

   IF EXISTS (SELECT 1 From UploadedStatememtsTable WHERE UploadDate >= @MonthStart AND UploadDate < @NextMonthStart AND AccountNo = @AccountNo) 
      RETURN 1

   -- next month
   SET @MonthStart = @NextMonthStart
   SET @NextMonthStart = DATEADD(month, 1, @MonthStart)

   IF EXISTS (SELECT 1 From UploadedStatememtsTable WHERE UploadDate >= @MonthStart AND UploadDate < @NextMonthStart AND AccountNo = @AccountNo) 
      RETURN 1

   -- previous month
   SET @MonthStart = DATEADD(month, -2, @MonthStart)
   SET @NextMonthStart = DATEADD(month, 1, @MonthStart)

   IF EXISTS (SELECT 1 From UploadedStatememtsTable WHERE UploadDate >= @MonthStart AND UploadDate < @NextMonthStart AND AccountNo = @AccountNo) 
      RETURN 1

   RETURN 0

END
试试这个

SELECT
    T.accountnumber,
    T.statementdate,    
    CASE
      WHEN 
        EXISTS
        (
            SELECT TOP 1 1 FROM Tbl tmp
            WHERE
                tmp.accountnumber = T.accountnumber AND
                tmp.statementdate =  DATEADD(mm, 1, T.statementdate) -- Next month
        ) AND
        EXISTS
        (
            SELECT TOP 1 1 FROM Tbl tmp
            WHERE
                tmp.accountnumber = T.accountnumber AND                 
                tmp.statementdate =  DATEADD(mm, -1, T.statementdate)-- Priv month
        )   
      THEN 'There is entry'
      ELSE 'Missing' END 
FROM
    Tbl T

看看这个。在执行函数时,会出现一个错误,说明函数指定的参数太多