记录有多个状态可以重新检查。只需要符合特定条件的记录

时间:2013-06-18 22:58:18

标签: sql database postgresql

我有一张如下表格

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

有些名称和帐号持有相同的信息,但只有不同的状态和日期。

我正在尝试获取最新日期并将其与当前日期进行比较。因此,今天我会比较5e的比赛,5-22的史密斯和5-23的沃尔特......

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

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

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

1 个答案:

答案 0 :(得分: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