Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 查找最新日期_Sql Server_Date_Max - Fatal编程技术网

Sql server 查找最新日期

Sql 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

示例表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
 ------+------------+---------
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