根据最近的日期从多个相似的行中选择一行

时间:2014-10-20 14:05:25

标签: sql duplicates teradata

我有一个像这样的结构表:

customer_name,dateA,dateB,dateC

DateA<=DateB<=DateC.

客户有时会多次列出,每个DateA,DateB和DateC都有不同的日期。

所以,如果我的数据如下:

X, 10/01, 10/02, 10/03
X, 10/04, 10/05, 10/06
X, 10/05, 10/07, 10/08
Y, 10/01, 10/05, NULL
Y, 10/01, 10/06, NULL
Z, 10/02, NULL,  NULL
Z, 10/03, 10/04, NULL

我想:

X, 10/05, 10/07, 10/08
Y, 10/01, 10/06, NULL
Z, 10/03, 10/04, NULL

换句话说,我希望每个客户有一行,其中dateA,dateB和dateC是流程中的里程碑。

如果两行是同一客户且位于同一里程碑,我只想选择具有最远日期的那一行。

我正在使用Teradata 14.10。

对SQL来说相当新,所以任何帮助都会受到赞赏。

1 个答案:

答案 0 :(得分:0)

这将返回您的预期结果:

select * from tab
qualify
   row_number()
   over (partition by customer_name
         order by dateC desc, dateB desc, dateA desc) = 1