sql 通过登录日志表统计用户登录天数

oppa8599 2018-12-20 04:53:24
通过登录日志表统计用户登录天数
比如
userid login_time
10001 2018-12-13 14:39:56.300
10001 2018-12-13 14:59:56.100
10002 2018-12-13 16:23:21.200
10003 2018-12-13 23:58:31.500
10001 2018-12-14 11:48:51.200
10003 2018-12-15 13:03:43.400
10004 2018-12-15 15:27:28.100
10004 2018-12-15 23:59:59.100

如何得到结果:

userid daynum

10001 2
10002 1
10003 2
10004 1
...全文
696 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
早起晚睡 2018-12-21
  • 打赏
  • 举报
回复
你给出的问题的时候 我的第一反应就是怎么解决这个问题,答案不难但是你要有个思路,然后按这个思路去解决。
第一:要求登陆的天数 是不是要按人员分组
第二:是登陆的天数 是不是一天为单位,你的是以时间为单位,就想着怎么转换成天为单位的。
第三:然后求出来就行了。
这是我一看你的问题想到的 结果楼上已经给了 我就不写了。
吉普赛的歌 2018-12-20
  • 打赏
  • 举报
回复
USE tempdb
GO
IF OBJECT_ID('dbo.[t]') IS NOT NULL 
	DROP TABLE dbo.[t]
GO
CREATE TABLE dbo.[t](
[userid] INT
,[login_time] datetime
)
GO
SET NOCOUNT ON
INSERT INTO dbo.[t] VALUES(N'10001',N'2018-12-13 14:39:56.300')
INSERT INTO dbo.[t] VALUES(N'10001',N'2018-12-13 14:59:56.100')
INSERT INTO dbo.[t] VALUES(N'10002',N'2018-12-13 16:23:21.200')
INSERT INTO dbo.[t] VALUES(N'10003',N'2018-12-13 23:58:31.500')
INSERT INTO dbo.[t] VALUES(N'10001',N'2018-12-14 11:48:51.200')
INSERT INTO dbo.[t] VALUES(N'10003',N'2018-12-15 13:03:43.400')
INSERT INTO dbo.[t] VALUES(N'10004',N'2018-12-15 15:27:28.100')
INSERT INTO dbo.[t] VALUES(N'10004',N'2018-12-15 23:59:59.100')

SELECT userid
,COUNT(DISTINCT CONVERT(CHAR(10),login_time,120)) AS daynum
FROM t GROUP BY userid
/*
userid      daynum
----------- -----------
10001       2
10002       1
10003       2
10004       1
 */

Dear SQL(燊) 2018-12-20
  • 打赏
  • 举报
回复
with list as(
	select userid='10001',logintime='2018-12-13 14:39:56.300' union all
	select userid='10001',logintime='2018-12-13 14:59:56.100' union all
	select userid='10002',logintime='2018-12-13 16:23:21.200' union all
	select userid='10003',logintime='2018-12-13 23:58:31.500' union all
	select userid='10001',logintime='2018-12-14 11:48:51.200' union all
	select userid='10003',logintime='2018-12-15 13:03:43.400' union all
	select userid='10004',logintime='2018-12-15 15:27:28.100' union all
	select userid='10004',logintime='2018-12-15 23:59:59.100' 
)
select userid,logintime=count(distinct cast(logintime as date))
from list
group by userid

userid logintime
------ -----------
10001  2
10002  1
10003  2
10004  1


22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧