【发布时间】:2019-11-26 15:29:39
【问题描述】:
我有两张桌子。
交易
日期时间范围
我正在尝试为表 2 中每个开始时间和结束时间之间(包括)之间的事务求和 Col1。
我期待:
范围 1 = 3
范围 2 = 2
范围 3 = 1
【问题讨论】:
标签: sql-server tsql join group-by
我有两张桌子。
交易
日期时间范围
我正在尝试为表 2 中每个开始时间和结束时间之间(包括)之间的事务求和 Col1。
我期待:
范围 1 = 3
范围 2 = 2
范围 3 = 1
【问题讨论】:
标签: sql-server tsql join group-by
一种方法是相关子查询:
select dr.*,
(select sum(t.col1)
from transactions t
where t.datetime >= dr.start and
t.datetime <= dr.end
) as cnt
from daterange dr;
【讨论】:
试试这个:
select Start, End, sum(Col1) from Transactions t inner join [Date time range] d on [datetime] between Start and End
group by Start, End
【讨论】:
您可以使用简单的 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
【讨论】:
如果需要,您可以尝试以下方法,替换 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
【讨论】: