SQL查询以查找当前活动日期范围或上次通过的日期范围

SQL查询以查找当前活动日期范围或上次通过的日期范围,sql,sql-server,date,Sql,Sql Server,Date,给定日期D,是否有方法查找每个用户当前的活动订阅或最近过期的订阅 这是桌子的结构 user_subscription( user_subscription_id PRIMARY KEY, user_id, subscription_start_date, subscription_end_date, user_subscription_count ) 样本数据: 1 1 01-jan-2011 31-jan-2011 1 2

给定日期D,是否有方法查找每个用户当前的活动订阅或最近过期的订阅

这是桌子的结构

user_subscription(
    user_subscription_id PRIMARY KEY,
    user_id,
    subscription_start_date,
    subscription_end_date,
    user_subscription_count
)
样本数据:

1   1   01-jan-2011     31-jan-2011     1
2   1   01-mar-2011     01-apr-2011     2
3   1   03-jun-2011     05-dec-2011     3
4   2   05-jan-2011     11-jan-2011     1
5   2   01-jun-2011     01-nov-2011     2
结果示例:

D=2011年1月15日,用户1为第1行,用户2为第4行。 我正在努力找到一种在SQL中实现这一点的方法

目前,我为每个用户做一个单独的查询,但是为成千上万的用户做这个查询是很昂贵的

非常感谢您的任何帮助/想法

谢谢

您可以使用行号:

您可以使用行号:

您可以使用行号:

您可以使用行号:

在这里拉小提琴:

在这里拉小提琴:

在这里拉小提琴:

在这里拉小提琴:


假设每个用户的订阅根据用户订阅计数及时递增,并且只有一个东西被订阅,请尝试:

select *
  from user_subscription s
 where user_subscription_count =
       (select max(x.user_subscription_count)
          from user_subscription x
         where x.user_id = s.user_id
           and x.subscription_start_date < @D)

假设每个用户的订阅根据用户订阅计数及时递增,并且只有一个东西被订阅,请尝试:

select *
  from user_subscription s
 where user_subscription_count =
       (select max(x.user_subscription_count)
          from user_subscription x
         where x.user_id = s.user_id
           and x.subscription_start_date < @D)

假设每个用户的订阅根据用户订阅计数及时递增,并且只有一个东西被订阅,请尝试:

select *
  from user_subscription s
 where user_subscription_count =
       (select max(x.user_subscription_count)
          from user_subscription x
         where x.user_id = s.user_id
           and x.subscription_start_date < @D)

假设每个用户的订阅根据用户订阅计数及时递增,并且只有一个东西被订阅,请尝试:

select *
  from user_subscription s
 where user_subscription_count =
       (select max(x.user_subscription_count)
          from user_subscription x
         where x.user_id = s.user_id
           and x.subscription_start_date < @D)

您能显示当前的查询吗?是否有重叠/包含的句点?@chanom首先,我当前使用SQL查询获取用户的所有订阅,然后用Java按顺序处理。@RogerWolf Nope,我没有。你能显示你当前的查询吗?你有重叠/包含句点吗?@chanom首先,我当前使用SQL查询获取用户的所有订阅,然后用Java按顺序处理。@RogerWolf没有,我没有。你能显示你当前的查询吗?你有重叠/包含句点吗?@chanom首先,我当前使用SQL查询获取用户的所有订阅,然后用Java按顺序处理。@RogerWolf没有,我没有。你能显示你当前的查询吗?你有重叠/包含句点吗?@chanom首先,我当前使用SQL查询获取用户的所有订阅,然后用Java按顺序处理。@RogerWolf没有。