具有多个日期范围的sql count语句

时间:2014-06-01 14:04:20

标签: sql sql-server

我有两张不同约会日期的表。

表1

id  start date
1   5/1/14
2   3/2/14
3   4/5/14
4   9/6/14
5   10/7/14

表2

id  start date
1   4/7/14
1   4/10/14
1   7/11/13
2   2/6/14
2   2/7/14
3   1/1/14
3   1/2/14
3   1/3/14

如果我设定了日期范围,我可以计算每个约会日期,但我需要更改日期范围。 对于表1中的每个id,我需要添加表2中的不同约会日期但仅限 表1开始日期前6个月。 示例:计算ID为1的所有不同约会日期(表2),约会日期为12/1/13至5/1/14(之前6个月)。所以结果是2 ... 4/7/14和4/10/14在内,7/1/13在6个月之外。

所以我的问题是每个记录的范围都在变化,我似乎无法弄清楚如何编码。对于id 2,日期范围将是9/1 / 14-3 / 2/14,依此类推。

提前感谢大家!

2 个答案:

答案 0 :(得分:0)

我认为你想要的是一种联接。

select t1.id, count(t2.id) as numt2dates
from table1 t1 left outer join
     table2 t2
     on t1.id = t2.id and
        t2.startdate between dateadd(month, -6, t1.startdate) and t1.startdate
group by t1.id;

日期算术的确切语法取决于数据库。

答案 1 :(得分:0)

试试这个:

 SELECT id,
        (
            SELECT  COUNT(*)
            FROM    table2
            WHERE   id = table1.id
                AND table2.start_date >= DATEADD(MM,-6,table1.start_date)
        ) AS table2records
 FROM   table1

DATEADD从table1中的日期开始减去6个月,子查询返回相关记录的数量。