Select 上网时间分段,Count(用户名) as 上网人数
from
(
Select Distinct 用户名,上网时间分段=小时
from
源表
) T
Group By 上网时间分段
--其中 上网时间分段=小时,是采用某种方式保留上网时间的小时数,例如8:10->8:00
from
(
Select Distinct 用户名,上网时间分段=小时
from
源表
) T
Group By 上网时间分段
--其中 上网时间分段=小时,是采用某种方式保留上网时间的小时数,例如8:10->8:00
解决方案 »
- 如果在自己的程序中调用MPLAYER的DLL库文件
- 有请高手!
- delphi中如何用excel显示数据库数据—-新手的奇菜的问题
- 怎样才能尽快的掌握DELPHI到熟练的程度?
- 大家推荐几个好的适全初学者的 delphi 的网站
- Delphi模拟退格键不能储存
- 如何将网络邻居中所有计算机名称放入listbox或ComboBox?
- delphi中强制转换为字符串的函数是什么?
- 哪里有关于qq制作的技术文章呢?
- 求求大家,救救我吧
- 急急急,Paradox数据库,未设索引,一排序后,数据表就成为 Read-Only 有何办法-----------------------------------------------------
- 请教,关于函数CallBack的
后面增加限制条件
Where 上网时间=:上网时间过滤
谢谢你的回答,请问:
--其中 上网时间分段=小时,是采用某种方式保留上网时间的小时数,例如8:10->8:00
这个‘采用某种方式保留上网时间的小时数’这个方式是什么呀,我没在你的语句里看到这个方式呀!
T
Group By 上网时间分段
这个T表示什么??是打错了吗??
我一贯的作法是将日期型的数据我都定义为Varchar(8),这样,我的SQL语句非常容易实现按年、月、日进行的汇总操作。
对于你的这个问题,我建议你通过数据库结构调整来实现要比较容易一些。比如将“上网时间段”字段细分为“日期”和“时间”。
那请问如果分成2个字段,日期和 时间后,我要实现上面的功能这个语句该怎么写?
where
groupby DATEPART(hour,上网时间)
FROM 表
GROUP BY Hour([上网时间]);
我试了一下你的程序,系统提示 DATEPART(hour,上网时间)附近有语法错误呀!
我用你的方法系统提示HOUR是不可识别的函数名,顺便问一下,这个HOUR表示什么呀??
用户名 上网时段
王一 2002-1-1 7
王二 2002-1-1 7
王三 2002-1-1 8
王四 2002-1-2 7
王一 2002-1-1 7
王二 2002-2-1 10
王一 2002-1-1 9
.. ..
.. ..
.. ..不知你的DataBase是什么,看来不是SQL Server,Oracle中实现如下:SELECT TO_CHAR(上网时间,'YYYY-MI-DD HH24') AS 时段,COUNT(用户名) 人数 FROM TABLENAME
GROUP BY TO_CHAR(上网时间,'YYYY-MI-DD HH24')
数据库是SQL server 2000
sql_server你可以查查手册
语句是这样的形式
SELECT TO_CHAR(上网时间,'HH24') AS 时段,COUNT(用户名) 人数 FROM TABLENAME
where trunc(上网时间)=:日期
GROUP BY TO_CHAR(上网时间,'HH24')
FROM TABLENAME
GROUP BY CONVERT(CHAR(14),上网时间)
我试了你的方法,系统提示(CHAR(14),上网时间) 这个逗号附近有错误 呀!
我按照你的方法已经基本可以了,但有个遗憾,按照你的方法出来的,时间段的那个字段名字 是: COLUMN1, 请问有没有方法把这个字段名字改成我想要的呀!
对不起,我又发现了一个问题,按照你的方法我不能加 where 条件限制呀,
一加上where 语句,就无法统计了,表是空的了。
但现在我执行时有错误呀,实现不了呀。
请问你在不在呀,按照你的方法,人数可以统计出来了,但加不了条件where
呀,现在统计出来的是所有日期的人数,我想选一天的都不行呀,还有这个新字段的名字也显示不出来的,请问该怎么解决呀!
请问你在不在呀,按照你的方法,人数可以统计出来了,但加不了条件where
呀,现在统计出来的是所有日期的人数,我想选一天的都不行呀,请问该怎么解决呀!就差这一点了呀!
select distinct DATEPART(hour,上网时间) as 你想要的字段名,count(*) as 上网人数
from 表
where 上网时间=GetDate()
group by DATEPART(hour,上网时间)
--不过我觉得执行结果不一定对--我的方法
Select 上网时间分段,Count(用户名) as 上网人数
from
(
Select Distinct 用户名,上网时间分段=DatePart(Hour,上网时间)
from
表
Where 上网时间=GetDate()
--GetDate()替换成过滤用的时间
) T
Group By 上网时间分段
--其中T是采用嵌套语句时引入的类似临时表名的东西,不用管他(不写要报错呦)当然如能确定第一种方式没问题,我推荐第一种。
我试着加了几条数据,发现还是有错呀,你的方法把同一个人连续在
7:00-8:00之间上网的次数算了,如:一个人在7:00--8:00之间上了3次网,你在人数统计上就加了3。而我希望统计出的人数是1个人呀,也就是说同一个人无论在7:00-8:00之间上几次网,都统计为1,只有8:00以后再上网才能在人数这个字段上再加1。请问该怎么解决呀。
谢谢你的再次回答,你的方法我试了,没错可以统计出。但在 用
Where 上网时间=GetDate()
就是有错误,我也不知道为什么,我相信你的代码是没问题的。我说明一下,
我在表里再加了个字段,日期。在上网时间的字段里就只输入时间了,不输入
日期了,然后根据你的程序在
Where 上网时间=GetDate()上,写了
Where 日期=2002-1-1
执行一下得到的表是空的,有字段没数据。请问这是为什么?
如果不写where 语句统计的结果是对的,没问题,但这样就不能选择日期了。也就是说我无法统计某一天的人数了。
将
Where 上网时间=GetDate()
替换成
Where DateDiff(day,上网时间)=0
select distinct 上网人,distinct DATEPART(hour,上网时间),count(*) from 表
where 条件
groupby 上网人,DATEPART(hour,上网时间)
不好意思,我是菜鸟,我不明白:
因为你的日期含有小时、分的信息,拿它和天做比较当然不会被认为一致
这句话的意思。
譬如说我在EDIT中输入一个日期,然后我把字段 '日期'中与EDIT中输入的相同的
数据统计出来,那我这样Where (日期='''+edit1.text+'''')
写不可以吗?
不好意思,我是菜鸟,我不明白:
因为你的日期含有小时、分的信息,拿它和天做比较当然不会被认为一致
这句话的意思。
譬如说我在EDIT中输入一个日期,然后我把字段 '日期'中与EDIT中输入的相同的
数据统计出来,那我这样Where (日期='''+edit1.text+'''') (当然类型转换我会处理好,这里假设类型一致)
写不可以吗?
不好意思,我是菜鸟,我不明白:
因为你的日期含有小时、分的信息,拿它和天做比较当然不会被认为一致
这句话的意思。
譬如说我在EDIT中输入一个日期,然后我把字段 '日期'中与EDIT中输入的相同的
数据统计出来,那我这样Where (日期='''+edit1.text+'''') (当然类型转换我会处理好,这里假设类型一致)
写不可以吗?
昨天下午我就看到你的回话,可惜我5:00后一直提交不了呀,等了1小时还是不行,所以只好现在回了,不知道你还在不在。
不好意思,我是菜鸟,我不明白:
因为你的日期含有小时、分的信息,拿它和天做比较当然不会被认为一致
这句话的意思。
譬如说我在EDIT中输入一个日期,然后我把字段 '日期'中与EDIT中输入的相同的
数据统计出来,那我这样Where (日期='''+edit1.text+'''') (当然类型转换我会处理好,这里假设类型一致)
写不可以吗?
Where DateDiff(day,上网时间,DateTime类型的输入日条件)=0就可以了
[email protected]
“因为你的日期含有小时、分的信息,拿它和天做比较当然不会被认为一致”是指因为你的“2002-1-1 7”含有小时的信息(看来他肯定是字符型的了)那么你用"="这个预算符和'2002-1-1'比较肯定是得不到相等的结果的。针对字符(char,varchar)型字段进行比较你可以采用
Where Substring(上网时间,1,8)=过滤输入的8位日期,此外注意你这种日期的保存形式不利于进行比较,例如12月的时候需要Substring(上网时间,1,9),而又是10以后就要改成Substring(上网时间,1,10),这样很麻烦,我建议
1、如果是DateTime类型保存上网时间,采用DateDiff方式
2、如果char,varchar类型采用格式化保存上网时间例如YYYY-MM-DD HH:NN:SS的形式,或者采用Convert先转成DateTime类型结合DateDiff,例如:
Where DateDiff(day,Convert(DateTime,上网时间),时间类型的输入查询日期)=0其余部分见附件
我现在调试就是在SQL查询器里调试的,我用你的
Select * from 表
Where DateDiff(day,'2002-1-1 10:30:00','2002-1-1')
语句也查不出数据呀,系统提示)附近有语法错误,我找了半天也找不出来。