Sql server T-SQL查询以比较日期并查找列条目是否存在一个月
我有两列,分别是“对账单日期”和“账号”。对于某些账号,报表每月上载一次,对于某些季度,对于某些年度,这些报表上载的日期保存在报表日期中 我想检查是否上传了特定的语句。 例如,对于账号2345426576报表日期2016年5月30日,我必须检查是否有2016年4月30日前一个月和2016年6月30日下一个月的条目。如果条目不存在,则应返回该月的缺失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为此
如果要比较不同表的日期,然后查找是否缺少语句。例如,如果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
看看这个。在执行函数时,会出现一个错误,说明函数指定的参数太多