你这种情况,单个SQL很难实现,建议采用临时表的方式,先把数据通过计算准备好,然后在用。
解决方案 »
- exe to Bin 和 bin to exe。具体怎么转换的
- 判断listview加载数据是否已经完成
- 添加问题
- 关于多态性,winxkm(蹩脚的程序员)和sanmaotuo(老冯)认识不同,我迷糊了,请高手指点!
- 急!!!如何在PageControl页面中动态创建Frame实例,并且获取该Frame里面的控件(如DbGrid)属性
- 帮忙看看这段代码的错误在哪里?猛男请进
- 学习3D作图从哪里开始比较好?
- ★★★各位大虾帮帮忙,我是初学者,我该如何开始学习delphi?pascal跟delphi是什么关系?★★★
- 关于速达ERP的DCOM配置的问题请各位高人帮忙!
- 求助Hank,我为什么不能成功地用ADO产生MS ACCESS97空数据库?
- 怎样在TADOQuery中执行create view ???
- format
用户的登陆名!
with query1 do
begin
close;
sql.clear;
sql.add('Select 上网时间分段,Count(用户名) as 上网人数');
sql.add('from');
sql.add('(');
sql.add('Select Distinct 用户名,上网时间分段=DatePart(Hour,上网时间)');
sql.add('from');
sql.add('上网记录表');
sql.add('Where DateDiff(day,上网时间,:DateLimit)=0');
sql.add(') T');
sql.add('Group By 上网时间分段');
ParamByName('DateLimit').AsDateTime:=StrToDate(Edit1.Text);
在这段语句中,出现时间相关的函数有两个
1、上网时间分段=DatePart(Hour,上网时间)
2、DateDiff(day,上网时间,:DateLimit)=0其中1是“只要一个人在当月上过网,人数就位1,多次上网不累加。”的过滤条件,例如当要求“一个小时内上网不重复累计”,就可以“上网时间分段=DatePart(Hour,上网时间)”,当要求“一天内上网不重复累计”就可以“上网时间分段=DatePart(day,上网时间)”,同样要求“一月上网,不重复累计”就可以“上网时间分段=DatePart(month,上网时间)”其实这个嵌套的SQL语句就是起了一个临时表的作用。对于2的解释是“统计一天或者一个月的人数”,在你要统计一天的上网情况时,你可以“DateDiff(day,上网时间,:DateLimit)=0”,当你统计一月的上网情况,你可以DateDiff(month,上网时间,:DateLimit)=0,这里当然也可以采用更灵活的时间段限制,例如8月4号到8月12号,就可以改成“where 上网时间 Between :startDateLimit And :endDateLimit”(注意这种写法DateLimit最好精确到秒)或者直接写成“where (上网时间 >= :startDateLimit) And (上网时间<=:endDateLimit)”
分清楚这两个时间条件的用途,就可以很灵活的任意查询了
另外如reallike(爱翔) 所说,9527的典故确实从哪儿来,当时取的是“蹦蹦跳跳像条狗,被人打不许汪汪叫”(大家还记得仆人们的队歌吧)之意,呵呵。
with query1 do
begin
close;
sql.clear;
sql.add('Select 上网时间分段,Count(用户名) as 上网人数');
sql.add('from');
sql.add('(');
sql.add('Select Distinct 用户名,上网时间分段=DatePart(day,上网时间)');////////就这里就改了一下
sql.add('from');
sql.add('上网记录表');
sql.add('Where DateDiff(day,上网时间,:DateLimit)=0');
sql.add(') T');
sql.add('Group By 上网时间分段');
ParamByName('DateLimit').AsDateTime:=StrToDate(Edit1.Text);
在EDIT1中输入2002-1,统计2002-1月的数据就出错,不知道,是不是日期类型的一定要将天数也写上呀。 9527的典故我也知道,看过星爷的唐伯虎点秋香,只是我以为取9527可能是另外一个原因,应为大学里,如果是95届的通常会以95XX作为班级号,所以我一直认为9527是由于95届的原因。
所以我试了一下就只能统计后缀那天的人数了,无法统计2002年1月的人数,我希望的是这样的表,在EDIT1中输入2002-01那么统计那个月的人数
上网日期 人数
1 4
2 1
3 .
4 .
5
. .
.
.
31 ..
详细的见邮件吧,我又发了一封。 94届的不算老吧,我是97的,也就比我大3年,现在我觉得公司就喜欢招有4,5年工作经验的人。