我将数据从Query LOG表插入到User表中。在查询日志表中,每次执行查询时都会显示用户别名。在Users表中,我希望User Alias列具有适用于别名的日期和业务名称的每个组合的用户别名,没有重复的行。我需要这个的原因是因为我创建的视觉效果需要反映每年为每个业务执行查询的不同用户数量。我还需要能够根据别名,业务和日期进行切片。我的目标是让结果看起来像..
User Alias LOB Date
Joe Business 1 2015-01-01
Joe Business 1 2016-01-01
Carol Business 1 2015-01-01
Carol Business 1 2016-01-01
以下是我目前得到的结果,使用下面的语句。
User Alias LOB Date
Joe Business 1 2015-01-01
Carol Business 1 2015-01-01
我知道" DISTINCT"声明需要去,但在那之后,我被困住了。
INSERT INTO [DBO].[USERS] ([User Alias], [LOB], [Date])
SELECT DISTINCT [User Alias], [LOB] , ( SELECT TOP 1 [Date] FROM Business) [Date]
FROM Business [LOG]
WHERE NOT EXISTS (
SELECT 1
FROM [dbo].[Users] [DIM]
WHERE [LOG].[User Alias] = [DIM].[User Alias]
AND [LOG].[LOB] = [DIM].[LOB]
AND [LOG].[Date] = [DIM].[Date]
)
AND [User Alias] IS NOT NULL
AND [LOB] IS NOT NULL
答案 0 :(得分:0)
GROUP BY Year(以及Alias和LOB)和SELECT MIN(日期)而不是TOP 1子查询。
编辑:如何实施我的建议的更精确的例子 -
INSERT INTO [DBO].[USERS] ([User Alias], [LOB], [Date])
SELECT [User Alias], [LOB] , MIN([Date]) [Date]
FROM Business [LOG]
WHERE NOT EXISTS (
SELECT 1
FROM [dbo].[Users] [DIM]
WHERE [LOG].[User Alias] = [DIM].[User Alias]
AND [LOG].[LOB] = [DIM].[LOB]
AND YEAR([LOG].[Date]) = YEAR([DIM].[Date])
)
AND [User Alias] IS NOT NULL
AND [LOB] IS NOT NULL
GROUP BY [User Alias], [LOB] , YEAR([Date])
答案 1 :(得分:0)
这似乎可以解决问题。
SELECT distinct [User Alias], [LOB], datepart(yyyy,[Date]) [Date]
FROM Business [LOG]
WHERE NOT EXISTS (SELECT 1 FROM [dbo].[Users] [DIM]
WHERE [LOG].[User Alias] = [DIM].[User Alias]
and [LOG].[LOB] = [DIM].[LOB] and [LOG].[Date] = [DIM].[Date])
and [User Alias] is not null
and [LOB] is not null
GROUP BY [DATE], [User Alias], [LOB]