日期范围中缺少的行数

时间:2011-08-23 07:57:16

标签: sql ms-access date-range

我有一个包含以下结构的表

 transaction_id    user_id     date_column   
   1                  1        01-08-2011     
   2                  2        01-08-2011    
   3                  1        02-08-2011   
   4                  1        03-08-2011

每个日期每个用户最多只能有一个条目。

如何获取特定日期范围内user_id不存在的所有行。 因此,对于user_id= 2和日期范围01-08-2011至03-08-2011的上表,我想要

result
02-08-2011
03-08-2011

现在,我使用for循环遍历给定日期范围内的所有日期。 这个工作正常,日期范围很小,但我认为它对于大型日期来说会变得非常重要。

1 个答案:

答案 0 :(得分:2)

根据评论中的建议,创建一个包含感兴趣日期的表格(我将其称为datesofinterest)。您日期范围内的每个日期都需要放入此表中。

datesofinterest table
--------------
date
--------------
01-08-2011
02-08-2011
03-08-2011

然后需要将所有用户ID与所有用户ID相结合 - 这是感兴趣的日期和用户ID的所有可能组合的集合。

现在您必须删除当前在原始表格中的所有感兴趣日期/用户ID,以获得最终答案。

在关系代数中,它类似于:

(datesofinterest[date] x transaction[user_id]) - (transaction[date_column, user_id])

This page可能有助于将“ - ”转换为SQL。填充datesofinterest表的Generating dates可以在SQL中完成,手动完成,或者使用帮助程序(perl's DateTime