情况:
我们有月度文件加载到我们的数据仓库,但不是被旧的加载替换,这些只是相互编译.文件在几天内加载.
因此,当运行SQL脚本时,我们会得到重复的记录,以便抵消这种情况,我们运行10-20个"客户"的联合并选择Max(loadID),例如
SELECT Customer column 2 column 3 FROM MyTable WHERE LOADID = (SELECT MAX (LOADID) FROM MyTable WHERE Customer= 'ASDA') UNION SELECT Customer column 2 column 3 FROM MyTable WHERE LOADID = (SELECT MAX (LOADID) FROM MyTable WHERE Customer= 'TESCO'
上述联盟必须为多个客户完成,所以我当然认为必须有一个更有效的方式.
我们不能在SELECT语句中使用MAX(LoadID),因为可能的情况可能需要以下内容:
星期一:Asda,Tesco,Waitrose加载到DW(LoadID为124)
星期二:Sainsburys加载DW(LoadID为125)
星期三:新的Tesco加载DW(LoadID为126)
所以我想要LoadID 124 Asda&Waitrose,125 Sainsburys和126 Tesco
使用窗口功能:
SELECT t.* FROM (SELECT t.*, MAX(LOADID) OVER (PARTITION BY Customer) as maxLOADID FROM MyTable t ) t WHERE LOADID = maxLOADID;