我有一个像这样的结构表:
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来说相当新,所以任何帮助都会受到赞赏。
答案 0 :(得分:0)
这将返回您的预期结果:
select * from tab
qualify
row_number()
over (partition by customer_name
order by dateC desc, dateB desc, dateA desc) = 1