在SQL Server中统计ID在指定日期及之后的出现次数
解决方案:统计ID在指定日期及之后的出现次数
这个需求很常见,咱们可以通过关联两张表+分组统计的方式轻松实现,具体步骤如下:
先明确两张表的数据
distinct表(唯一ID及对应基准日期):
| id | date |
|---|---|
| a | 2017-01-01 |
| b | 2016-01-01 |
| c | 2017-01-01 |
log表(ID的所有出现日志):
| id | date |
|---|---|
| a | 2017-01-01 |
| a | 2016-01-01 |
| b | 2017-01-01 |
| c | 2017-01-01 |
| b | 2016-01-01 |
| b | 2015-01-01 |
实现SQL语句
SELECT d.id, COUNT(l.id) AS count FROM `distinct` d INNER JOIN log l ON d.id = l.id WHERE l.date >= d.date GROUP BY d.id ORDER BY d.id;
代码说明
- 用
INNER JOIN将两张表通过id关联,确保只处理两张表都存在的ID(如果需要保留distinct表中所有ID,哪怕对应日期后没有日志,换成LEFT JOIN即可); WHERE子句过滤出log表中日期大于等于distinct表对应ID基准日期的记录;- 最后按
id分组,用COUNT(l.id)统计符合条件的日志条数(用l.id而不是*是为了避免LEFT JOIN时统计到NULL值)。
执行结果
| id | count | 备注 |
|---|---|---|
| a | 1 | 2017-01-01及之后的记录数 |
| b | 2 | 2016-01-01及之后的记录数 |
| c | 1 | 2017-01-01及之后的记录数 |
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

