我有一个包含以下结构的表
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循环遍历给定日期范围内的所有日期。 这个工作正常,日期范围很小,但我认为它对于大型日期来说会变得非常重要。
答案 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)