2012-03-02 41 views
0

我必须获得用户,这些用户至少在给定日期的前后两周出现。所以可以说我有数据:选择分组数据计数= 2的行

userName date week 
user1 27 10 2011 44 
user1 27 10 2011 44 
user1 27 10 2011 44 
user2 21 04 2011 17 
user2 29 04 2011 17 
user2 02 05 2011 19 
user2 03 05 2011 19 
user2 16 05 2011 21 
user2 23 05 2011 22 
user3 06 01 2011 24 
user3 14 05 2011 25 
user3 20 05 2011 26 
user3 27 05 2011 27 

,我需要得到首先由用户和星期分组结果,然后我需要计算有多少个星期的用户出现(可以说20周)之前和之后,和然后选择谁至少2周前,后出现唯一的,所以在我的情况,我会得到的结果

user2 

可惜我不能,因为数据库的限制创建viewTable。此查询是给我只能通过用户和星期分组结果,数据的第一部分,但我不知道怎么算的分组数据:

SELECT username, 
     min(a.actionDate) as date, 
     datepart(wk,a.actionDate) as week 
FROM  Table1 a   
GROUP BY username , 
     datepart(wk,amd.actionDate) 

感谢您的帮助。

+0

什么是RDBMS好吗?甲骨文? SQL Server? PostgreSQL的? MySQL的? SQLite的?其他? – Benoit 2012-03-02 14:25:55

回答

0

要返回的有日期记录在指定的日期后至少两周之前两个星期,尝试用户:

select username 
from Table1 
group by username 
having datediff(wk, min(actiondate), @date) >= 2 and 
     datediff(wk, @date, max(actiondate)) >= 2 
+0

我试过你的代码,看起来很简单,但它没有给出想要的结果。 'datediff(wk,min(actiondate),@date)> = 2'的一方正在工作并过滤至少两周有记录的用户,但如果我在第二部分之后加上'datediff(wk,@date ,max(actiondate))> = 2 '它再次给我所有的用户,不明白为什么? – Mallvina 2012-03-02 14:58:42

+0

你分配给@date的值是多少? – 2012-03-02 15:07:35

+0

我指定日期,例如'10 05 2011',这是在第20周的日期。我认为问题是有一个声明和另一个声明。因为如果我一个接一个跑他们都给我正确的结果,但如何加入他们呢? – Mallvina 2012-03-02 15:20:03