mysql查询:如果将记录按时间段分组

时间:2022-05-02 11:13:15
我使用的是mysql数据库

假设有一张表:
q_id a_id start_date end_date

其中,a_id是外键。一个q_id对应多个a_id

我想按a_id分组

如果想得到每个a_id有对应一共有多少个q_id,查询语句是
select a.a_id, count(q.q_id)
FROM test
group by a.aid

现在我想查询

以a_id分组,a_id相同的q_id一共有几个,start_date大于今天的有几个, end_date小于今天的有几个,start_date中间end_date包括今天的有几个

请问这种分组怎么查啊囧

ps:神啊我真讨厌做统计5555555555555555555555

5 个解决方案

#1


贴记录及要求结果出来看看

#2


楼主,你这个需求,是无法通过一个sql语句搞定的
因为,你的需求是> ,< 而不是简单的等于

#3


group by 日期的话,将会出现很多个组

所以,这个,要通过三条语句,分别得出,小于今天的,今天的,大于今天的

#4


select a_id,
count(q_id) as a_id相同的q_id一共有几个,
sum(start_date>curdate()) as start_date大于今天的有几个,
sum(end_date<curdate()) as end_date小于今天的有几个,
sum(curdate() between start_date and end_date) as start_date中间end_date包括今天的有几个
from 假设有一张表
group by a_id

#5


谢谢,毫无疑问的满分~\(≧▽≦)/~

#1


贴记录及要求结果出来看看

#2


楼主,你这个需求,是无法通过一个sql语句搞定的
因为,你的需求是> ,< 而不是简单的等于

#3


group by 日期的话,将会出现很多个组

所以,这个,要通过三条语句,分别得出,小于今天的,今天的,大于今天的

#4


select a_id,
count(q_id) as a_id相同的q_id一共有几个,
sum(start_date>curdate()) as start_date大于今天的有几个,
sum(end_date<curdate()) as end_date小于今天的有几个,
sum(curdate() between start_date and end_date) as start_date中间end_date包括今天的有几个
from 假设有一张表
group by a_id

#5


谢谢,毫无疑问的满分~\(≧▽≦)/~