Sql server 查找最新日期
示例表CustSql server 查找最新日期,sql-server,date,max,Sql Server,Date,Max,示例表Cust CustID | CustNameTx ---------+------ 1 | Paul 2 | Bob 3 | Chuck 示例表发票 Date | InvCustID -----------+------ 19/02/2017 | 2 19/02/2017 | 1 19/02/2018 | 2 19/02/2017 | 3 示例结果 CustID | CustNameTx | Expired
CustID | CustNameTx
---------+------
1 | Paul
2 | Bob
3 | Chuck
示例表发票
Date | InvCustID
-----------+------
19/02/2017 | 2
19/02/2017 | 1
19/02/2018 | 2
19/02/2017 | 3
示例结果
CustID | CustNameTx | Expired
------+------------+---------
1 | Bob | 19/02/2017
3 | Chuck | 19/02/2017
我正试图编写生成上述结果所需的SQL代码。
在第一个表中,我有客户记录。
第二个表保存有到期日期的客户发票。
我正在尝试编写一个代码,查找其会员资格在30天前过期且尚未续订的客户。此外,代码需要跳过那些已续订会员资格的客户。
我正在使用Microsoft SQL
这就是我迄今为止成功地写的东西
SELECT CuFirstNameTx, CuStoreNoTx_N
FROM T_CuCust
INNER JOIN T_IIInvoiceItem ON IICustID=CuCustID
WHERE DATEDIFF (d, IIShipDate_N,GetDate()) = 31
SELECT MAX(IIShipDate_N), IICustID
FROM T_IIInvoiceItem
GROUP BY IICustID
它们都是单独工作的,但是,我无法将两行代码合并到一行中以生成上面的结果。您可能正在寻找类似以下内容:
select * from
Cust c
cross apply (
Select top 1 *
from Invoices i
where c.CustID = i.InvCustID and
i.[Date] < getdate() and i.[Date] > dateadd(day, -30, getdate()) i1
where
not exists (select 1 from Invoices i2 where c.CustID = i.InvCustID and i.[Date] > getdate())
这是一个非常简单的处理方法-
SELECT [CustID]
, [CustNameTx]
, MAX([Date]) AS [Expired]
FROM [Invoices] AS I
JOIN [Cust] AS C ON I.[InvCustID] = C.[CustID]
GROUP BY [CustID]
, [CustNameTx]
HAVING MAX([Date]) < DATEADD(DAY, -30, GETDATE())
谢谢你,我按照你的建议写了以下内容
SELECT CuCustID
, CuFirstNameTx
, MAX(IIShipDate_N) AS Expired
FROM T_IIInvoiceItem AS I
JOIN T_CuCust AS C ON I.T_IIInvoiceItem = C.CuCustID
GROUP BY CuCustID
, CuFirstNameTx
HAVING MAX(IIShipDate_N) < DATEADD(DAY, -30, GETDATE())
但是,它返回一个错误
列名“T_IIInvoiceItem”无效
这实际上是表的名称,它是正确的。根据Shuvankar的建议,我成功地编写了所需的代码
SELECT IICustID, CuFirstNameTx, MAX(IIShipDate_N) AS Expired
FROM T_IIInvoiceItem
INNER JOIN T_CuCust ON CuCustID=IICustID
GROUP BY IICustID, CuFirstNameTx
HAVING DATEDIFF(d, MAX(IIShipDate_N),GetDate())=30
非常感谢您的帮助我正在尝试编写SQL-然后展示该SQL,并解释它如何执行或不执行您想要的操作。添加了迄今为止我设法编写的代码。谢谢您,我按照您的建议编写了以下SELECT CUCUCUSTID,CuFirstNameTx,MAXIIShipDate从T_IIInvoiceItem过期,因为我在I.T_IIInvoiceItem=C.CuCustID组中加入T_CuCustID,CuFirstNameTx的MAXIIShipDate_N