1

我有一个名为的表Payment,如下所示:

---------------------------------------------
|PaymentId  |InvoiceId  |Created            |
|-----------|-----------|-------------------|
|10032      |184432     |7/10/2013 11:52am  |
|10033      |184458     |7/10/2013 1:53pm   |
|10034      |184412     |7/12/2013 12:02pm  |
|10035      |184412     |7/12/2013 12:03pm  |
|10036      |184413     |7/13/2013 2:15pm   |
|10037      |184413     |7/13/2013 3:20pm   |
---------------------------------------------

我想要做的是创建一个 SQL 语句,它将返回所有具有相同InvoiceId的行并且CreatedDateTime 字段的差异大于一个小时。

因此,在上面的示例中,我希望返回 PaymentId 的 10036 和 10037,因为它们共享相同的 InvoiceId,并且该Created字段相隔一个多小时。

PaymentId 的 10034 和 10035 不会被返回,因为即使它们共享相同的 invoiceid,它们也不会相隔一个小时或更长时间。

PaymentId 的 10032 和 10033 不会返回,因为即使它们相隔一个多小时,它们也不共享相同的 InvoiceId。

任何有关撰写本文的帮助将不胜感激!

我正在使用 SQL Server 2008。

4

2 回答 2

1
SELECT  PaymentID
      , InvoiceID
      , Created
FROM    Payment p
WHERE   EXISTS ( SELECT InvoiceID
                 FROM   Payment p2
                 WHERE  p.InvoiceID = p2.InvoiceID
                 GROUP BY InvoiceID
                 HAVING DATEDIFF(Hour, MIN(Created), MAX(Created)) > 1 ) 
于 2013-09-10T19:54:27.483 回答
0

你可以试试这个:

 select A.* from payment a 
 join payment1 b on a.InvoiceId=b.InvoiceId and datediff(hh,b.Created,a.created)>=1
 union
 select A.* from payment a 
 join payment1 b on a.InvoiceId=b.InvoiceId and datediff(hh,a.Created,b.created)>=1
于 2013-09-10T19:52:19.537 回答