sql语句 按天统计人数

sql语句 按天统计人数,第1张

select sum(人数) as 人数,

convret(varchar(10),日期,112) as 日期

from 报名表

group by convret(varchar(10),日期,112)

Oracle按不同时间分组统计的sql

如下表table1:

日期(exportDate)

数量(amount)

--------------

-----------

14-2月

-08

20

10-3月

-08

2

14-4月

-08

6

14-6月

-08

75

24-10月-09

23

14-11月-09

45

04-8月

-10

5

04-9月

-10

44

04-10月-10

88

注意:为了显示更直观,如下查询已皆按相应分组排序

1按年份分组

select

to_char(exportDate,'yyyy'),sum(amount)

from

table1

group

by

to_char(exportDate,'yyyy');

年份

数量

-----------------------------

2009

68

2010

137

2008

103

2按月份分组

select

to_char(exportDate,'yyyy-mm'),sum(amount)

from

table1

group

by

to_char(exportDate,'yyyy-mm')

order

by

to_char(exportDate,'yyyy-mm');

月份

数量

-----------------------------

2008-02

20

2008-03

2

2008-04

6

2008-06

75

2009-10

23

2009-11

45

2010-08

5

2010-09

44

2010-10

88

3按季度分组

select

to_char(exportDate,'yyyy-Q'),sum(amount)

from

table1

group

by

to_char(exportDate,'yyyy-Q')

order

by

to_char(exportDate,'yyyy-Q');

季度

数量

------------------------------

2008-1

22

2008-2

81

2009-4

68

2010-3

49

2010-4

88

4按周分组

select

to_char(exportDate,'yyyy-IW'),sum(amount)

from

table1

group

by

to_char(exportDate,'yyyy-IW')

order

by

to_char(exportDate,'yyyy-IW');

数量

------------------------------

2008-07

20

2008-11

2

2008-16

6

2008-24

75

2009-43

23

2009-46

45

2010-31

5

2010-35

44

2010-40

88

PS:Oracle按时间段分组统计

想要按时间段分组查询,首先要了解level,connect

by,oracle时间的加减

关于level这里不多说,我只写出一个查询语句:

----level

是一个伪例

select

level

from

dual

connect

by

level

<=10

---结果:

1

2

3

4

5

6

7

8

9

10

oracle时间的加减看看试一下以下sql语句就会知道:

select

sysdate

-1

from

dual

----结果减一天,也就24小时

select

sysdate-(1/2)

from

dual

-----结果减去半天,也就12小时

select

sysdate-(1/24)

from

dual

-----结果减去1

小时

select

sysdate-((1/24)/12)

from

dual

----结果减去5分钟

select

sydate-(level-1)

from

dual

connect

by

level<=10

---结果是10间隔1天的时间

下面是本次例子:

select

dt,

count(satisfy_degree)

as

num

from

T_DEMO

i

,

(select

sysdate

-

(level-1)

2

dt

from

dual

connect

by

level

<=

10)

d

where

isatisfy_degree='satisfy_1'

and

iinsert_time<dt

and

iinsert_time>

ddt-2

group

by

ddt

例子中的sysdate

-

(level-1)

2得到的是一个间隔是2天的时间

group

by

ddt

也就是两天的时间间隔分组查询

自己实现例子:

create

table

A_HY_LOCATE1

(

MOBILE_NO

VARCHAR2(32),

LOCATE_TYPE

NUMBER(4),

AREA_NO

VARCHAR2(32),

CREATED_TIME

DATE,

AREA_NAME

VARCHAR2(512),

);

select

(sysdate-13)-(level-1)/4

from

dual

connect

by

level<=34

--从第一条时间记录开始(sysdate-13)为表中的最早的日期,“34”出现的分组数(一天按每六个小时分组

就应该为4)

一下是按照每6个小时分组

select

mobile_no,area_name,max(created_time

),dt,

count()

as

num

from

a_hy_locate1

i

,

(select

(sysdate-13)-(level-1)/4

dt

from

dual

connect

by

level

<=

34)

d

where

ilocate_type

=

1

and

icreated_time<dt

and

icreated_time>

ddt-1/4

group

by

mobile_no,area_name,ddt

另外一个方法:

--按六小时分组

select

trunc(to_number(to_char(created_time,

'hh24'))

/

6),count()

from

t_test

where

created_time

>

trunc(sysdate

-

40)

group

by

trunc(to_number(to_char(created_time,

'hh24'))

/

6)

--按12小时分组

select

trunc(to_number(to_char(created_time,

'hh24'))

/

6),count()

from

t_test

where

created_time

>

trunc(sysdate

-

40)

group

by

trunc(to_number(to_char(created_time,

'hh24'))

/

6)

思路:先建一个中间表 sys_date(s_date var(8))

接着,把每天数据插入。

最后进行关联查询。

查询实例:

SELECT nvl(CONVERT(VARCHAR(20), TIME, 112),0), COUNT(IP)

FROM WEB_USER join sys_date on CONVERT(VARCHAR(20), TIME, 112)=sys_dates_date

where sys_dates_date >='20100101'

and sys_dates_date <='20100131'

GROUP BY CONVERT(VARCHAR(20), TIME, 112)

ORDER BY CONVERT(VARCHAR(20), TIME, 112)

楼上的只统计了一个月的吧

WITH t AS

     (SELECT     ROWNUM

            FROM DUAL

      CONNECT BY ROWNUM <= 12)

SELECT    TO_CHAR (LAST_DAY (TO_DATE (   TO_CHAR (SYSDATE, 'YYYY')

                                      || LPAD (TO_CHAR (ROWNUM), 2, 0),

                                      'YYYYMM'

                                     )

                            ),

                   'YYYY-MM'

                  )

       || '月',

          TO_CHAR (LAST_DAY (TO_DATE (   TO_CHAR (SYSDATE, 'YYYY')

                                      || LPAD (TO_CHAR (ROWNUM), 2, 0),

                                      'YYYYMM'

                                     )

                            ),

                   'DD'

                  )

       || '天'

  FROM t

直接全选复制粘贴运行

数量就是在Bar Code列?

如A列为“序列号”,随后为B、C列,

按小时统计数量: 以统计9时为例,=SUMPRODUCT((HOUR($C:$C)=9)($B:$B))

按分钟统计数量:以统计13分为例,=SUMPRODUCT((MINUTE($C:$C)=13)($B:$B))

按天统计数量:以20日为例,=SUMPRODUCT((DAY($C:$C)=20)($B:$B))

如果在D1中输入要统计的日期和时间,如2012-10-20 9:12:59,则上面的公式分别改为:

=SUMPRODUCT((HOUR($C:$C)=HOUR(D1))($B:$B))

=SUMPRODUCT((MINUTE($C:$C)=MINUTE(D1)($B:$B))

=SUMPRODUCT((DAY($C:$C)=DAY(D1))($B:$B))

sqlserver写法

其他数据库的话,语法得改,字段类型不一致的话也得改

创建表

create table test

(姓名 varchar(10),

时间 varchar(10))

insert into test values ('张三','2014-1-2')

insert into test values ('张三','2014-1-6')

insert into test values ('李四','2014-1-2')

执行

select s1

from

(select t2姓名,t1rq

from

(select convert(varchar(10),rq,120)  rq

from

(select cast('2014-1-2' as datetime)+number rq from masterspt_values where type='p') t

where trq between '2014-1-2' and '2014-1-6') t1,

(select distinct 姓名 from test) t2) s1

where not exists (select 1 from test s2 where s1姓名=s2姓名 and s1rq=convert(varchar(10),cast(s2时间 as datetime),120))

结果

----------------------补充---------------

你下次能不能直接追问,这样补充都看不到的,幸亏我又看了一眼

select s1 

from 

(select t2姓名,t1rq 

from 

(select convert(varchar(10),rq,120)  rq 

from 

(select cast('2014-1-2' as datetime)+number rq from masterspt_values where type='p') t 

where trq between '2014-1-2' and '2014-1-6') t1, 

(select 姓名 from 人员表) t2) s1 

where not exists (select 1 from test s2 where s1姓名=s2姓名 and s1rq=convert(varchar(10),cast(s2时间 as datetime),120))  

order by s1姓名,s1rq

我新建了一个人员表,里边就一列,叫“姓名”

没有必要这么做,既然你知道如何进行查询,那么可以有两个方案来实现每天的查询:

在查询语句中嵌入当前日期作为查询条件,由此进行和数据表中的Y字段比较,进行筛选,就可以得出当前日期的记录数;此方法在查询语句中实现,比较死,只能得出语句中设定日期的记录数。

灵活一点的办法是需通过查询画面来实现,在画面中增加一个日期的输入框或者嵌入日历,有此选择需要查询的日期,然后再将这个日期嵌入前面所提的查询语句,如此就可以实现任意日期的查询,得到任意查询日期的记录。

以上就是关于sql语句 按天统计人数全部的内容,包括:sql语句 按天统计人数、Oracle数据库按时间进行分组统计数据的方法、sql按日期统计等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/sjk/9417854.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-28
下一篇2023-04-28

发表评论

登录后才能评论

评论列表(0条)

    保存