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

sam*_*sam 6 sql t-sql sql-server

情况:

我们有月度文件加载到我们的数据仓库,但不是被旧的加载替换,这些只是相互编译.文件在几天内加载.

因此,当运行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'
Run Code Online (Sandbox Code Playgroud)

上述联盟必须为多个客户完成,所以我当然认为必须有一个更有效的方式.

我们不能在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

Gor*_*off 6

使用窗口功能:

SELECT t.*
FROM (SELECT t.*, MAX(LOADID) OVER (PARTITION BY Customer) as maxLOADID
      FROM MyTable t
     ) t
WHERE LOADID = maxLOADID;
Run Code Online (Sandbox Code Playgroud)

  • 这个!!我们有一个胜利者!谢谢戈登.所以我问了两个问题,两者都与'PARTITION BY'有关,所以猜猜我会读什么! (2认同)