为不同的客户选择不同的最大ID

时间:2015-12-17 12:46:07

标签: sql sql-server tsql

情况:

我们将每月文件加载到我们的数据仓库中,但不是用旧的加载替换,而是将它们编译在彼此之上。这些文件会在几天内加载。

所以在运行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特易购

2 个答案:

答案 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