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
使用窗口功能:
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)
| 归档时间: |
|
| 查看次数: |
52 次 |
| 最近记录: |