查找最新的下载项目和下载时间

时间:2012-09-25 08:57:54

标签: sql-server tsql

我有一个CRM系统和一个网络下载服务。在网络下载中,客户识别出客户名称。在crm系统中,我有crmID作为标识符。要将Web客户名称映射到crmID,我有一个映射表。由于一些客户倾向于每次都以不同的方式编写客户名称,因此许多网络名称可能会链接到同一crmID。链接系统始终保持同步,没问题。

crmMap( webName VACHAR(100),  
        crmID CHAR(6) )  
webDownload( webName VARCHAR(100), 
             item VARCHAR(100), 
             itemVersion VARCHAR(100), 
             downloadTime DATETIME )

我想要的是显示每个客户(crmMap.crmID)上次下载的(webDownload.item and webDownload.itemVersion)以及发生的时间(webDownload.downloadTime)

1 个答案:

答案 0 :(得分:1)

您可以使用row_number()来确定:

select m.crnId, d.item, d.itemVersion, d.downloadTime
from crmMap m
inner join
(
  select webname, item, itemVersion, downloadTime,
    row_number() over(partition by webname order by downloadTime desc) rn
  from webDownload
) d
  on m.webName = d.webName
where rn = 1

甚至子查询:

select m.crnId, d.item, d.itemVersion, d.maxTime
from crmMap m
inner join 
(
  select max(downloadTime) maxTime, webName, item, itemVersion
  from webDownload
  group by webName, item, itemVersion
) d
  on m.webName = d.webName

编辑,如果您只想要MAX()下载时间,那么您将需要使用:

select m.crnId, m.item, m.itemVersion, m.maxTime
from crmMap m
inner join 
(
  select max(downloadTime) maxTime
  from webDownload
) d
  on m.downloadTime = d.webName