0

我有一张如下表

Account number |  Last Name  |   Status       |   date
111                doe           acknowledged   04-11-2013
111                doe           acknowledged   05-01-2013
111                doe           paid           05-10-2013
123                smith         acknowledged   05-15-2013
123                smith         acknowledged   05-22-2013
145                walter        paid           05-23-2013

有些姓名和帐号拥有相同的信息,但状态和日期不同。

我正在尝试获取最新日期并将其与当前日期进行比较。因此,今天我会将 doe 与 5-10 进行比较,将 smith 与 5-22 进行比较,walter 与 5-23 进行比较……

现在,一个帐户可以多次重新检查,并且只有在付款后才会停止重新检查。所以史密斯将是唯一一个在以后重新检查的人。

我想查找所有具有已确认状态的记录。我不希望任何这些被支付。

到目前为止,在我的代码中,我能够获得记录的最大日期,但它带回了确认记录和付费记录,因为它们都是不同的。我只想要尚未支付且仍被确认的记录。

4

1 回答 1

1

您似乎想要未付款帐户的最新确认状态。这是一个查询:

select AccountNumber, Name,
       max(date)
from t
group by AccountNumber, Name
having sum(case when status = 'Paid' then 1 else 0 end) = 0

您的问题中只有两种不同的状态。如果您有更多并且只想要确认的最大日期,那么您会这样做:

select AccountNumber, Name,
       max(case when status = 'Acknowledged' then date end)
from t
group by AccountNumber, Name
having sum(case when status = 'Paid' then 1 else 0 end) = 0

要获取最新状态,您可以使用row_number()枚举行:

select AccountNumber, Name,
       max(case when status = 'Acknowledged' then date end),
       max(case when seqnum = 1 then status end) as MostRecentStatus
from (select t.*,
             row_number() over (partition by AccountNumber, Name order by date desc) as seqnum
      from t
     ) t
group by AccountNumber, Name
having sum(case when status = 'Paid' then 1 else 0 end) = 0
于 2013-06-18T23:10:46.783 回答