【发布时间】:2020-04-17 16:36:12
【问题描述】:
我有一张类似下面的桌子。我想获取用户和角色每天的访问次数。
表格:
CREATE TABLE #TempUser
(
[Id] int NULL,
[Username] nvarchar(50) NULL
)
CREATE TABLE #TempRole
(
[Id] int NULL,
[Title] nvarchar(50) NULL
)
CREATE TABLE #TempUserRole
(
[UserId] int NULL,
[RoleId] int NULL,
[LastDate] date NULL
)
数据:
INSERT INTO #TempUser([Id],[UserName])
VALUES
(1,'Marvin'),
(2,'Tom'),
(3,'Charli')
INSERT INTO #TempRole([Id],[Title])
VALUES
(1,'Admin'),
(2,'Manager'),
(3,'Guest')
INSERT INTO #TempUserRole([UserId],[RoleId],[LastDate])
VALUES
(1,1,'2019-02-03'),
(1,2,'2019-02-06'),
(1,2,'2019-02-03'),
(3,3,'2019-02-03'),
(3,1,'2019-02-02'),
(3,1,'2019-02-03'),
(2,1,'2019-02-05'),
(2,1,'2019-02-05'),
(3,1,'2019-02-03'),
(1,1,'2019-02-03'),
(2,1,'2019-02-06'),
(2,1,'2019-02-03'),
(1,1,'2019-02-03'),
(2,1,'2019-02-02'),
(1,1,'2019-02-03'),
(2,1,'2019-02-05'),
(1,1,'2019-02-05'),
(2,1,'2019-02-03')
如何获取具有相同“user”、“Role”、“Date”、“CounterOfDay”的用户列表的用户和角色每天的访问次数?我需要的输出应该是这样的:
UserName Role Date CounterOfDay
Charli Admin 2019-02-02 2
Tom Admin 2019-02-02 2
...
【问题讨论】:
-
这似乎是一个简单的
JOIN和GROUP BY。你试过吗? -
我不想使用
GROUP BY并且无法删除重复项 -
GROUP BY 的替代方案是使用 COUNT(*) OVER (PARTION BY ....) 语法。
标签: sql sql-server