我有一张如下表格
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的沃尔特......
现在,帐户可以多次重新检查,只有在付款后才会停止重新检查。所以史密斯将是唯一一个在以后重新检查的人。
我想找到所有具有已确认状态的记录。我不希望任何这些付款。
到目前为止,在我的代码中我能够获得记录的最大日期,但它会带回已确认和付费的记录,因为它们都是截然不同的。我只想要那些尚未支付但仍被确认的记录。
答案 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