【发布时间】:2015-01-09 17:17:03
【问题描述】:
我有一个带有列的表 A:
id, transactiondate, pointsordered
表 B
id,redemptiondate,pointsused
表 C
作为
id,joindate
我想要什么
某个日期范围需要所有数据,比如 YYYY-MM-DD 中的 2014-01-01 到 2014-02-01
- 按日期计算的总 ID 数(表 a 中的 ID 数)
在该日期进行第一笔交易的账户数
按日期排序的总分(表 a 中的总分)
- 在该日期赎回的帐户数(表 b 中的 id 数)
countofpointsued 在那个日期(表 b 中的点总和)
按日期加入的新客户
我知道 id 是表 b 和表 c 的外键,但我如何确保我匹配日期?
例如,如果我按日期加入,例如 a.transactiondate=b.redemption.date,它会为我提供在该日期进行交易并在该日期赎回的所有客户。
我想要计算在该日期进行交易的所有客户以及在该日期兑换的客户(无论他们何时进行交易)
这是我尝试过的
select count( distinct a.id) as noofcustomers, sum(a.pointsordered), sum(b.pointsused), count(distinct b.id)
from transaction as a join redemption as b on a.transactiondate=b.redemptiondate
where a .transactiondate between '2014-01-01' and '2014-02-01'
group by a.transactiondate,b.redemptiondate
【问题讨论】:
-
首先为什么你的表叫保留字?如果您还有另一个带有整数的表(您可以将该天数添加到开始日期)或仅包含日期,您将能够做得更好。然后将您的汇总(分组)结果加入到该起始表中。
标签: sql sql-server join count