【问题标题】:sql count statement with multiple date ranges具有多个日期范围的 sql 计数语句
【发布时间】:2014-06-01 14:04:20
【问题描述】:

我有两张预约日期不同的桌子。

表 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 中),约会日期在 2013 年 12 月 1 日和 2014 年 5 月 1 日之间(6 个月前)。所以结果是 2...4/7/14 和 4/10/14 在 6 个月内,7/1/13 在 6 个月外。

所以我的问题是每条记录的范围都会发生变化,我似乎无法弄清楚如何对此进行编码。对于 id 2,日期范围将是 9/1/14-3/2/14 等等。

提前感谢大家!

【问题讨论】:

  • 在不需要更改日期 DATEADD(MM, -6, getdate()) 之前,我已将其用于日期范围
  • 根据评论,我假设数据库是 SQL Server(并将问题标记为此类)。
  • 感谢您的快速回复。明天当我有数据集可以使用时,我将尝试这些选项!问候。

标签: sql sql-server


【解决方案1】:

试试这个:

 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 个月,子查询返回相关记录的计数。

【讨论】:

    【解决方案2】:

    我认为你想要的是一种加入。

    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;
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-09-30
      • 2021-10-30
      • 2019-07-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多