【发布时间】:2021-06-08 15:53:24
【问题描述】:
我在 SQL Server Mgmt Studio 中工作,我正在尝试识别自过去 45 天以来未发布过付款的帐户。我尝试过声明 getdate 小于 45 天的最小和最大日期,但这没有用。我也尝试过说明“最后一次付款在哪里!> getdate() -45”....但这并没有给我想要的结果。我需要查询做的只是识别在过去 45 天内真正没有付款过的账户。但我不确定如何在 where 子句中说明这一点。这是我的查询
DECLARE @minDate datetime;
DECLARE @maxDate datetime;
SET @minDate = GETDATE();
SET @maxDate = GETDATE() - 45;
SELECT DISTINCT
a.id,
a.FacilityCode AS [Facility],
a.accountUnit,
a.accountNum AS [Account Number],
a.amountBalance AS [Balance],
a.accountstatus AS [Status],
CONVERT(date, a.accountStatusDate) AS StatusDate,
pmtEntryDate AS [Pmt Entry Date],
v.LastLinkARpmtDate AS [Last Pmt Date],
CONVERT(date, a.accountnextactdate) AS NextActionDate,
CONVERT(date, a.rpcDate) AS RightpartyContactDate,
a.flag AS accountFlag,
pay.flag AS pmtFlag,
a.accounttype
FROM dbo.tbAccount a
JOIN dbo.tbpmtinfo pay ON a.id = pay.id
JOIN dbo.vLastPmtDate v ON v.id = a.id
FULL JOIN (SELECT id,
MAX(deDate) AS MFSLoadDate
FROM dbo.tbDataEvents (NOLOCK)
WHERE deNewVal = 'MFS'
GROUP BY id) m ON m.id = a.id
WHERE pay.flag IN ('D')
AND a.amountBalance > 0
AND a.FacilityCode IN ('PHKY', 'QANM', 'QAOH', 'QBCA', 'QBIL', 'QBTX', 'QCIL', 'QDAL', 'QEWY', 'QFAR', 'QFGA',
'QGIL', 'QHAR', 'QHIL', 'QHTN', 'QLAL', 'QLPA', 'QMIL', 'QMNC', 'QMNM', 'QMNV', 'QMOR',
'QMTN', 'QMTX', 'QMUT', 'QRIL', 'QRKY', 'QSPA', 'QTGA', 'QTKY', 'QUIL', 'QVIL', 'QWIL', 'LHFL')
AND a.amountBalance >= '1000'
AND a.accountStatus IN ('PA', 'PP', 'BPA')
AND a.flag = 'A'
AND a.accountType IN ('Resid', 'Slfpy')
--and LastLinkARpmtDate !> Getdate() -45 and accountNum = '40728597'
AND LastLinkARpmtDate BETWEEN @minDate AND @maxDate;
【问题讨论】:
-
我真的建议你养成正确格式化 SQL 的习惯;例如很好地使用换行符和空白。它使您的 SQL Far 更具可读性。
-
停止使用nolock 溅射您的代码。但如果需要并且理解和接受其含义,至少使用当前语法而不是弃用的语法。
-
LastLinkARpmtDate BETWEEN @minDate AND @maxDate;仔细看。您为 minDate 分配了什么值? -
并且您实际上希望包括最后付款日期早于 的帐户。这会让事情更清楚吗?当然,假设该特定列是您需要过滤的列。
标签: sql sql-server