用户操作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
不吝赐教!
假设你还有一个Users表,里面有所有用户的信息。那么这个查询语句就是从Users表里查出所有用户,再排除掉从Events表里取出的7天内有过操作的用户。
SELECT * FROM Users
WHERE UserID NOT IN
(
SELECT UserID FROM Events
WHERE DATEDIFF(day, CreateTime, GETDATE()) >= 7
)
我的思路是分完组之后取 每个分组的第一行(不用游标)?
或者有CTE的写法吗?
探讨一下。
@孤独之影: 没听懂你的意思。分什么组?根据什么分组?
@水牛刀刀: 根据用户编号分组,然后在分组中找最后一次操作时间,再判断。
@孤独之影: 如果用户压根在Events这个表里没数据呢?
@水牛刀刀: 没关系啊,匹配不到这个用户不就行了。我的思路估计sql server实现不了(或者没到级别)。
用你的思路已完成逻辑业务:
select * form user
where id not in
( select distinct uid from event where datediff(day,create_time,getdate())