【问题标题】:Sum column based on date range from another table基于另一个表的日期范围的总和列
【发布时间】:2019-11-26 15:29:39
【问题描述】:

我有两张桌子。

交易

日期时间范围

我正在尝试为表 2 中每个开始时间和结束时间之间(包括)之间的事务求和 Col1。

我期待:

范围 1 = 3
范围 2 = 2
范围 3 = 1

【问题讨论】:

    标签: sql-server tsql join group-by


    【解决方案1】:

    一种方法是相关子查询:

    select dr.*,
           (select sum(t.col1)
            from transactions t
            where t.datetime >= dr.start and
                  t.datetime <= dr.end
           ) as cnt
    from daterange dr;
    

    【讨论】:

      【解决方案2】:

      试试这个:

      select Start, End, sum(Col1) from Transactions t inner join [Date time range] d on [datetime] between Start and End
      group by Start, End
      

      【讨论】:

        【解决方案3】:

        您可以使用简单的 JOIN 和 GROUP BY:

        SELECT ranges.id, ranges.start, ranges.end, SUM(transactions.col1)
        FROM ranges
        LEFT JOIN transactions ON transactions.datetime >= ranges.start AND
                                  transactions.datetime <= ranges.end
        GROUP BY ranges.id, ranges.start, ranges.end
        

        【讨论】:

          【解决方案4】:

          如果需要,您可以尝试以下方法,替换 LEFT 连接。

          select d.id,min(start),max(end), sum(isnull(t.col1,0.00)) 
          from DateRange d
          left join transactions t on 1=1 and t.dateime between d.start and d.end
          group by d.id

          【讨论】:

            猜你喜欢
            • 2012-09-15
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2019-05-11
            • 2020-06-12
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多