百分悬赏 SQL达人!不要吝啬自己的才华了

来源:百度知道 编辑:UC知道 时间:2024/05/12 05:38:13
因为不敢保证会有答案 所以只放50分,满意答案后再追加50 本人还有600+分,说到做到

问题

一份ACCESS表,有2列 "姓名" "时间"
姓名格式为 文本
时间格式为 YY-MM-DD HH:MM:SS

其中时间的范围从2008-6-6 00:00:00 ~ 2006-6-20 23:59:59

现在我希望写出一个SQL
搜索出只在2008-6-6号中出现过的人的姓名 如果6-6号中出现了超过1次,则只显示1个姓名

比如

姓名 时间

啊大 2008-6-6 10:00:00
啊二 2008-6-6 10:01:00
啊三 2008-6-6 10:02:00
啊大 2008-6-6 10:03:00
啊四 2008-6-7 10:04:00
啊五 2008-6-8 10:05:00

SQL后
只显示

姓名

啊大
啊二
啊三
不是你们想想的那样的~~!! 我的意思是 我的表里时间是 6号~20号,,,,我想要的是在6号~15号中,只在6号出现过的人名,(不是只出现过1次,即使在6号出现了100次,但在别的日期没有出现的 也要统计进去)

select distinct 姓名 from 表 where month(时间)=6 and day(时间)=6 group by 姓名

select distinct 姓名 时间
from 表名
where 时间 between 2008-6-6 00:00:00 and 2008-6-6 23:59:59
看看对不对记得给分

你的意思说的不是太明确,我猜可能是只取"时间"字段的日期部分作为条件.
如果是这样,实现起来非常简单,用一些转换函数把时间部分的信息丢掉就可以实现.
比如:
select * from 表名
where Mid$(Cstr(时间),1,10) = '2008-06-06'
说明:
Mid$(Cstr(时间),1,10) 的意思是先把时间字段转换为字符型,
再对其取前面10位.Mid$是取子字符串函数,Cstr是转换为字符串
函数

如果要同一记录只出现一次加一个distinct关键字就行了
例如:
select distinct * from 表名
where Mid$(Cstr(时间),1,10) = '2008-06-06'

access的转换函数我不太熟悉,也许还有更好用的函数,你自己找找.

select 姓名 From [数据表] Where Datediff(d,时间,'2008-6-6')=0 group by 姓名

耶。拿分。
好久没有分拿了。

回:chinamis2008 确实没试过。基本上没有使用过AC数据库进行开发。

楼上的有没能试过 Datediff 可不可以在ACCESS中用啊?