情况:
我们将每月文件加载到我们的数据仓库中,但不是用旧的加载替换,而是将它们编译在彼此之上。这些文件会在几天内加载。
所以在运行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特易购
答案 0 :(得分:6)
使用窗口功能:
SELECT t.*
FROM (SELECT t.*, MAX(LOADID) OVER (PARTITION BY Customer) as maxLOADID
FROM MyTable t
) t
WHERE LOADID = maxLOADID;
答案 1 :(得分:0)
派生表的子查询是否符合您的需求?
select yourfields
from yourtables join
(select customer, max(loadID) maxLoadId
from yourtables
group by customer) derivedTable on derivedTable.customer = realTable.customer
and loadId = maxLoadId