查询 汇总

asd100230520 2012-06-27 05:47:56
有一张 用户登录记录表(结构及数据如)
表名:UserLogin
uid(int) loginDate(datetime)
100101 2011-05-09 14:25:23
100102 2011-05-09 14:25:25
100103 2011-05-10 14:25:35
100101 2011-05-10 14:30:00
100101 2011-05-10 15:20:00
100101 2011-05-10 20:20:00

100102 2011-05-11 15:30:00
...
现在怎么得出(假如记录就这么多)
时间 登录次数
2011-01 0
2011-02 0
2011-03 0
2011-04 0
2011-05 5(同一天一个账号不管登录多少次都只算一次)
...
2011-12 0
大神帮帮忙啊
...全文
133 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
asd100230520 2012-06-28
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]
SQL code
select left(dt,7) as 时间,sum(cnt) as 登录次数
from
(
select convert(varchar(10),loginDate,120) as dt,count(distinct uid) as cnt
from tb
group by convert(varchar(10),loginDate,120) as d……
[/Quote]
恩 我自己构建了一个月份表,现在问题已经解决了,大树威武
asd100230520 2012-06-28
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]
SELECT logindate,COUNT(uid) FROM userlogin
GROUP BY LEFT(CONVERT(NVARCHAR(20),logindate,112),8) ,uid
[/Quote]

感谢你的帮助,我的问题已经解决了,
你的语句会出现:
消息 8120,级别 16,状态 1,第 1 行
选择列表中的列 logindate无效,因为该列没有包含在聚合函数或 GROUP BY 子句中。
gal1024 2012-06-28
  • 打赏
  • 举报
回复
SELECT logindate,COUNT(uid) FROM userlogin
GROUP BY LEFT(CONVERT(NVARCHAR(20),logindate,112),8) ,uid
筱筱澄 2012-06-27
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

SQL code
select left(dt,7) as 时间,sum(cnt) as 登录次数
from
(
select convert(varchar(10),loginDate,120) as dt,count(distinct uid) as cnt
from tb
group by convert(varchar(10),loginDate,120) as dt
) ……
[/Quote]
+1
百年树人 2012-06-27
  • 打赏
  • 举报
回复
select left(dt,7) as 时间,sum(cnt) as 登录次数
from
(
select convert(varchar(10),loginDate,120) as dt,count(distinct uid) as cnt
from tb
group by convert(varchar(10),loginDate,120) as dt
) t
group by left(dt,7)

如果没有登录的月份也要显示的话,需要构造一个月份表,然后left join

22,210

社区成员

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

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