首页 新闻 赞助 找找看

请教查询最近七天无任何操作的所有用户sql语句

0
悬赏园豆:5 [已解决问题] 解决于 2011-11-23 11:23

用户操作event表结构

字段名

数据类型

默认值约束、额外

注释

id

int

 

identity(1,1)

无意义ID

uid

int

 

 

用户编号

memo

nvarchar(250)

Y

 

事件描述

create_time

datetime

 

 

事件时间

 
83469 2011-10-31 19:14
83469 2011-10-31 19:18
92322 2011-11-1 11:25
92324 2011-11-1 11:50
92324 2011-11-1 11:59
92324 2011-11-1 12:01
92327 2011-11-1 12:22
92327 2011-11-1 12:30
92327 2011-11-1 12:32
83469 2011-11-1 14:51
83469 2011-11-1 15:15
83469 2011-11-1 15:16
83469 2011-11-1 15:20
83469 2011-11-1 15:43
83469 2011-11-1 15:45
92334 2011-11-1 17:25
92334 2011-11-1 17:33
92334 2011-11-1 17:38
92334 2011-11-1 17:47
83469 2011-11-1 17:56
83469 2011-11-1 17:59
SELECT uid ,create_time
FROM event
GROUP BY uid,create_time
HAVING DATEDIFF(day, Max(create_time), GETDATE())>7

不吝赐教!

孤独之影的主页 孤独之影 | 初学一级 | 园豆:192
提问于:2011-11-03 10:07
< >
分享
最佳答案
0

假设你还有一个Users表,里面有所有用户的信息。那么这个查询语句就是从Users表里查出所有用户,再排除掉从Events表里取出的7天内有过操作的用户。

SELECT * FROM Users

WHERE UserID NOT IN

(

    SELECT UserID FROM Events

    WHERE DATEDIFF(day, CreateTime, GETDATE()) >= 7

)

收获园豆:5
水牛刀刀 | 大侠五级 |园豆:6350 | 2011-11-03 10:18

我的思路是分完组之后取 每个分组的第一行(不用游标)?

或者有CTE的写法吗?

探讨一下。

孤独之影 | 园豆:192 (初学一级) | 2011-11-03 10:33

@孤独之影: 没听懂你的意思。分什么组?根据什么分组?

水牛刀刀 | 园豆:6350 (大侠五级) | 2011-11-03 10:40

@水牛刀刀: 根据用户编号分组,然后在分组中找最后一次操作时间,再判断。

孤独之影 | 园豆:192 (初学一级) | 2011-11-03 10:43

@孤独之影: 如果用户压根在Events这个表里没数据呢?

水牛刀刀 | 园豆:6350 (大侠五级) | 2011-11-03 10:44

@水牛刀刀: 没关系啊,匹配不到这个用户不就行了。我的思路估计sql server实现不了(或者没到级别)。 

用你的思路已完成逻辑业务:

select * form user

where id not in

( select distinct uid from event where datediff(day,create_time,getdate())

孤独之影 | 园豆:192 (初学一级) | 2011-11-03 10:52
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册