【发布时间】:2018-10-10 10:53:03
【问题描述】:
我已经设法使用ROW_NUMBER() 获得了一些有序的结果,并按国家代码和客户参考进行了分区,按报价日期排序。 ROW_NUMBER() 列称为 PRank。
CountryCode ¦ ClientRef ¦ Quote Ref ¦ Name ¦ Address ¦ PostCode ¦ PreferencesCode ¦ QuoteDate ¦ PolicyType ¦ PRank ¦
0 AABB001 AABB001MB1 Mr A Smith 1 Country Lane WA21 2PU 5934611 2017-03-18 00:00:00 MB 1
0 AABB001 AABBMM1MB2 Mr A Smith 1 Country Lane WA21 2PU 5934611 2017-03-18 00:00:00 MB 2
0 AABB001 AABBMM1MB3 Mr A Smith 1 Country Lane WA21 2PU 5934611 2017-03-18 00:00:00 MB 3
0 BBGG003 BBGG003MB1 Mrs B Jones 2 City Road M1 3XY 312191 2017-09-02 00:00:00 MB 1
这是我的ROW_NUMBER() 专栏的代码:
ROW_NUMBER() OVER(PARTITION BY CountryCode, ClientRef, QuoteDate
ORDER BY QuoteDate DESC, PolicyRef asc)
有很多像最后一行这样的结果;它们只计数到 1,因为客户在相关日期只有一个报价。我想消除这些行而不从客户结果中删除在同一日期出现多个报价的任何行(即我仍然希望在上面的结果中看到第一个客户的所有三行)所以我想通过使用 CTE 和过滤在 ROW_NUMBER 上会导致我丢失我仍然需要查看的结果中的数据。
我试图对 HAVING 和 PRank 列求和,但我无法弄清楚分组,因为我不想实际聚合数据,只需删除 ClientRef 只有一个 QuoteRef 的任何行每天。
【问题讨论】:
-
将当前结果集插入到临时表中,然后删除
having count(*) = 1中的那些
标签: sql sql-server filtering row-number