我创建了一个查询,我想将结果插入到另一个表中。它将每天作为作业运行,导入的数据仍将保留在结果集中。如果数据已存在于目标表中,我不希望导入数据。查询如下所示:
WITH cteUniquePages
(
CorrelationID,
Title,
URL,
HitDate,
TotalVisitsOnDate,
DontUseThisDate)
AS
(
SELECT DISTINCT
CorrelationID,
Title,
URL,
HitDate,
COUNT(HitDate) OVER (PARTITION BY URL, HitDate) 'TotalVisitsOnDate',
CAST(LogTime AS date) 'DontUseThisDate'
FROM
(SELECT
CorrelationId,
UserLogin,
LogTime,
Title,
CONCAT(
(CASE
WHEN WebUrl <> '' THEN CONCAT(ServerUrl,'/') ELSE ServerUrl END),
WebUrl,DocumentPath) 'URL',
CONCAT(
CASE
WHEN (LEN(DATEPART(day,LogTime)))=1 THEN CONCAT('0',DATEPART(day,LogTime)) END,
CASE
WHEN (LEN(DATEPART(day,LogTime)))=2 THEN (DATEPART(day,LogTime)) END,'-',
CASE
WHEN (LEN(DATEPART(month,LogTime)))=1 THEN CONCAT('0',DATEPART(month,LogTime)) END,
CASE
WHEN (LEN(DATEPART(month,LogTime)))=2 THEN (DATEPART(month,LogTime)) END,
'-', DATEPART(year,LogTime)) 'HitDate'
FROM WSS_Logging.dbo.RequestUsage
WHERE UserLogin <> 'nt authority\iusr'
AND UserLogin <> 'i:0#.w|pfnet\zz_sharepoint13'
AND DocumentPath LIKE '%.aspx'
AND DocumentPath NOT LIKE '%/_layouts/%'
AND UserLogin <> 'PFNET\E01BrownS'
AND UserLogin <> 'i:0#.w|pfnet\sharepointtestacc1'
GROUP BY UserLogin, WebUrl, DocumentPath, LogTime, Title, ServerUrl,CorrelationId) as a
),
cteVisitsAllTime
(
CorrelationID,
LogTime,
Title,
URL,
TotalVisits
)
AS
(
SELECT DISTINCT
CorrelationID,
LogTime,
Title,
URL,
COUNT(URL) OVER (PARTITION BY URL) 'TotalVisits'
FROM(
SELECT
CorrelationId,
Title,
CONCAT(
(CASE
WHEN WebUrl <> '' THEN CONCAT(ServerUrl,'/') ELSE ServerUrl END),
WebUrl,DocumentPath) 'URL',
LogTime
FROM WSS_Logging.dbo.RequestUsage
WHERE UserLogin <> 'nt authority\iusr'
AND UserLogin <> 'i:0#.w|pfnet\zz_sharepoint13'
AND DocumentPath LIKE '%.aspx'
AND DocumentPath NOT LIKE '%/_layouts/%'
AND UserLogin <> 'PFNET\E01BrownS'
AND UserLogin <> 'i:0#.w|pfnet\sharepointtestacc1') as a
),
cteVisitsLast7Days
(
CorrelationID,
Title,
URL,
TotalVisits
)
AS
(
SELECT
CorrelationID,
Title,
URL,
COUNT(URL) OVER (PARTITION BY URL) 'TotalVisits'
FROM(
SELECT
CorrelationId,
Title,
CONCAT(
(CASE
WHEN WebUrl <> '' THEN CONCAT(ServerUrl,'/') ELSE ServerUrl END),
WebUrl,DocumentPath) 'URL',
LogTime
FROM WSS_Logging.dbo.RequestUsage
WHERE UserLogin <> 'nt authority\iusr'
AND UserLogin <> 'i:0#.w|pfnet\zz_sharepoint13'
AND DocumentPath LIKE '%.aspx'
AND DocumentPath NOT LIKE '%/_layouts/%'
AND UserLogin <> 'PFNET\E01BrownS'
AND UserLogin <> 'i:0#.w|pfnet\sharepointtestacc1') as a
WHERE LogTime >= DATEADD(day,-7, GETDATE())
),
cteVisitsLast30Days
(
CorrelationID,
Title,
URL,
TotalVisits
)
AS
(
SELECT
CorrelationID,
Title,
URL,
COUNT(URL) OVER (PARTITION BY URL) 'TotalVisits'
FROM(
SELECT
CorrelationId,
Title,
CONCAT(
(CASE
WHEN WebUrl <> '' THEN CONCAT(ServerUrl,'/') ELSE ServerUrl END),
WebUrl,DocumentPath) 'URL',
LogTime
FROM WSS_Logging.dbo.RequestUsage
WHERE UserLogin <> 'nt authority\iusr'
AND UserLogin <> 'i:0#.w|pfnet\zz_sharepoint13'
AND DocumentPath LIKE '%.aspx'
AND DocumentPath NOT LIKE '%/_layouts/%'
AND UserLogin <> 'PFNET\E01BrownS'
AND UserLogin <> 'i:0#.w|pfnet\sharepointtestacc1') as a
WHERE LogTime >= DATEADD(day,-30, GETDATE())
),
cteVisitsLastYear
(
CorrelationID,
Title,
URL,
TotalVisits
)
AS
(
SELECT
CorrelationID,
Title,
URL,
COUNT(URL) OVER (PARTITION BY URL) 'TotalVisits'
FROM(
SELECT
CorrelationId,
Title,
CONCAT(
(CASE
WHEN WebUrl <> '' THEN CONCAT(ServerUrl,'/') ELSE ServerUrl END),
WebUrl,DocumentPath) 'URL',
LogTime
FROM WSS_Logging.dbo.RequestUsage
WHERE UserLogin <> 'nt authority\iusr'
AND UserLogin <> 'i:0#.w|pfnet\zz_sharepoint13'
AND DocumentPath LIKE '%.aspx'
AND DocumentPath NOT LIKE '%/_layouts/%'
AND UserLogin <> 'PFNET\E01BrownS'
AND UserLogin <> 'i:0#.w|pfnet\sharepointtestacc1') as a
WHERE LogTime >= DATEADD(day,-365, GETDATE())
)
SELECT DISTINCT
cteUniquePages.Title,
cteUniquePages.URL,
cteUniquePages.HitDate,
cteUniquePages.TotalVisitsOnDate,
cteVisitsAllTime.TotalVisits 'All Time Visits',
cteVisitsLast7Days.TotalVisits 'Visits Last 7 Days',
cteVisitsLast30Days.TotalVisits 'Visits Last 30 Days',
cteVisitsLastYear.TotalVisits 'Visits Last Year',
cteUniquePages.DontUseThisDate
FROM cteUniquePages
LEFT JOIN cteVisitsAllTime ON cteVisitsAllTime.CorrelationID = cteUniquePages.CorrelationID
LEFT JOIN cteVisitsLast7Days ON cteVisitsLast7Days.CorrelationID = cteUniquePages.CorrelationID
LEFT JOIN cteVisitsLast30Days ON cteVisitsLast30Days.CorrelationID = cteUniquePages.CorrelationID
LEFT JOIN cteVisitsLastYear ON cteVisitsLastYear.CorrelationID = cteUniquePages.CorrelationID
ORDER BY DontUseThisDate DESC, cteUniquePages.URL
Run Code Online (Sandbox Code Playgroud)
为此,有几个选项:
WHERE NOT EXISTS (SELECT * FROM <target_table> WHERE <matching_predicates> )
在INSERT ... SELECT ...
语句中添加子句。但请确保您使用真实数据模式进行测试,就像使用相对复杂的数据一样。LEFT OUTER JOIN
到目标表并添加一个WHERE target_table.primarykey IS NULL
子句 - 如果外连接没有找到匹配的行,这将是假的。通常这会产生相同的计划,就WHERE NOT EXISTS
好像它可能因复杂查询而异。如果存在性能差异(我已经看到该JOIN
变体的性能更好)WHERE NOT EXISTS
尽管这是几个引擎版本之前的),请使用生成更好计划的查询,否则使用您发现更易于阅读和维护的查询。MERGE
而不是 plain INSERT
,尽管如果您想更新现有行而不是复制它们,这是最有用的。 归档时间: |
|
查看次数: |
646 次 |
最近记录: |