首页 新闻 搜索 专区 学院

sql分组查询问题,求高手指点

0
悬赏园豆:10 [已解决问题] 解决于 2019-08-24 08:17

1:数据库表里是今年的全部数据,

2:时间范围

(例如2019年:

1月份时间条件:【between '2018-12-31 17:00:00' and '2019-01-31 16:59:59'】

2月份时间条件:【between '2019-01-31 17:00:00' and '2019-02-28 16:59:59'】

如果按照这样的时间范围,如何吧1——12个月份的数据行数分组出来?

大da脸的主页 大da脸 | 初学一级 | 园豆:136
提问于:2019-08-20 15:27
< >
分享
最佳答案
0

使用DATEPART函数可以实现,例如
SELECT DATEPART(month,DateTime) as month, * FROM xxxx
可查询出每条数据的月份,然后可更具月份进行分组查询
My Sql 数据库使用 DATE_FORMAT(datetime , '%b') 函数

收获园豆:10
一只小熊猫 | 菜鸟二级 |园豆:352 | 2019-08-20 17:06

例如:2月份的数据是包含1月下午17:00后的数据,这样怎么查询

大da脸 | 园豆:136 (初学一级) | 2019-08-21 08:28

@大da脸: 你说的一月下午17:00后的数据是某一天还是当月说有天数

一只小熊猫 | 园豆:352 (菜鸟二级) | 2019-08-21 09:09

@一只小熊猫: 17:00  以后的数据就算作第二天的数据了

大da脸 | 园豆:136 (初学一级) | 2019-08-21 10:57

@大da脸: 你可以使用 CASE
SELECT CASE
WHEN datetime between '2018-12-31 17:00:00' and '2019-01-31 16:59:59' THEN 1
WHEN datetime between '2019-01-31 17:00:00' and '2019-02-28 16:59:59' THEN 2
WHEN datetime between '2019-02-28 17:00:00' and '2019-03-31 16:59:59' THEN 3
ELSE 4
END as month,

  • FROM xxxx
    但是有个弊端,就是月份的最后一天,你没有办法写死,必须要动态传递参数
一只小熊猫 | 园豆:352 (菜鸟二级) | 2019-08-21 11:21

@一只小熊猫: 那就是说这个时间范围只能这样写了,我是想把1——12个月的数据总量查询成一个表

 

例如:{11,22,33,44,55,66,77,88,99,10,11,12}

大da脸 | 园豆:136 (初学一级) | 2019-08-21 11:24

@大da脸: select month,count(1) from (
SELECT CASE
WHEN datetime between '2018-12-31 17:00:00' and '2019-01-31 16:59:59' THEN 1
WHEN datetime between '2019-01-31 17:00:00' and '2019-02-28 16:59:59' THEN 2
WHEN datetime between '2019-02-28 17:00:00' and '2019-03-31 16:59:59' THEN 3
ELSE 4
END as month,

FROM xxxx
) as table group by moneth

一只小熊猫 | 园豆:352 (菜鸟二级) | 2019-08-21 11:32

@一只小熊猫: 嗯  我试试

大da脸 | 园豆:136 (初学一级) | 2019-08-21 13:46

@大da脸: 可以了吗

一只小熊猫 | 园豆:352 (菜鸟二级) | 2019-08-23 09:04

@一只小熊猫: 目前只能这样了

大da脸 | 园豆:136 (初学一级) | 2019-08-24 08:17
其他回答(1)
0

提供另外一个办法:
构造一个字段char(6),取值为此时间字段+7小时后转为字符串yyyyMM:convert(char(6), dateadd(hour, 7, dateField1), 112)
用此字段group by 即可。

starStars | 园豆:50 (初学一级) | 2019-08-24 11:27
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册