我正在尝试找出如何根据累加的特定行向累加添加额外条件。
我想做的是这样的:
select @datee := DATE_FORMAT(date, "%Y-%m") datee, count(distinct name) new
from requests where name not in (select name from requests where DATE_FORMAT(date, "%Y-%m") != @datee)
group by datee;
换句话说:对于每个日期,它应该显示仅在该特定月份出现的名称数量。
结果可能如下所示:
datee new
2018-11 343 <-- all these names only occur in 2018-11
2018-12 384 <-- all these names only occur in 2018-12
2019-01 438 ...
2019-02 460 ...
2019-03 442
2019-04 463
2019-05 470
2019-06 290
感谢您的帮助!
答案 0 :(得分:0)
使用简化版本的数据,您可以检查名称仅在一个月内出现,并与count(distinct)连接。
drop table if exists t;
create table t
(name varchar (1), mm int);
insert into t values
('a',1),('a',2),('a',3),
('b',2),
('c',1),('c',1),
('d',3),
('e',2),('e',2);
select mm,count(distinct t.name) obs
from t
join
(
select name, count(distinct mm) occurances
from
t
group by name having occurances = 1
) s on s.name = t.name
group by mm;
+------+-----+
| mm | obs |
+------+-----+
| 1 | 1 |
| 2 | 2 |
| 3 | 1 |
+------+-----+
3 rows in set (0.00 sec)
请注意,a消失了,因为这三个月都出现了。