导航
  • 主页
  • 基础类
  • 应用实例
  • 新技术前沿

★★★★★分组后怎么样取得满足条件的记录?(写SQL语句)

surfl 2003-12-09 02:52:47
表:T ID号 部门名称 用户姓名 消费时间 消费机器 工作组
T(IDD,Dptname,username, tTime, ndevice, ngroup)
1 一部 小A 2003-01-01 12:12:12 消费机A 一组
.....

现在要求查询出所有那些,在一天内在同一台消费机器上消费多次(有二次或二次以上消费)的记录。
...全文
44 点赞 收藏 7
写回复
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
j9988 2003-12-18
SELECT * FROM @T1 a
WHERE EXISTS
(
SELECT 1 FROM @t1
WHERE tid < a.tid AND
deviceid = a.deviceid AND
userID = a.userID AND
abs(DATEDIFF(ss,usertime,a.usertime))<=60
)

把以下记录删了,正确吗?
tID userID userTime deviceid
----------- ------ ------------------------------------------------------ -----------
2 0001 2001-10-10 12:10:00.000 1
3 0001 2001-10-10 12:11:00.000 1
4 0001 2001-10-10 12:11:00.000 1
5 0001 2001-10-10 12:12:00.000 1
6 0001 2001-10-10 12:13:00.000 1
8 0001 2001-10-10 12:15:00.000 1
回复
surfl 2003-12-18

--表结构
--(ID号,部门ID,用户ID,刷卡时间,设备ID)
--(tID,userID,userTime,deviceid)

--测试数据(组一)
--(1,'0001','2001-10-10 12:10:00',1)
--(2,'0001','2001-10-10 12:10:00',1)
--(3,'0001','2001-10-10 12:11:00',1)
--(4,'0001','2001-10-10 12:11:00',1)
--(5,'0001','2001-10-10 12:12:00',1)
--(6,'0001','2001-10-10 12:13:00',1)
--(7,'0001','2001-10-10 12:15:00',1)
--(8,'0001','2001-10-10 12:15:00',1)

--=>目标结果 tID = (1,5,7)


--测试过程
declare @T1 table(tID int, userID varchar(4),userTime datetime,deviceid int)
insert into @T1
SELECT 1,'0001','2001-10-10 12:10:00',1
UNION ALL SELECT 2,'0001','2001-10-10 12:10:00',1
UNION ALL SELECT 3,'0001','2001-10-10 12:11:00',1
UNION ALL SELECT 4,'0001','2001-10-10 12:11:00',1
UNION ALL SELECT 5,'0001','2001-10-10 12:12:00',1
UNION ALL SELECT 6,'0001','2001-10-10 12:13:00',1
UNION ALL SELECT 7,'0001','2001-10-10 12:15:00',1
UNION ALL SELECT 8,'0001','2001-10-10 12:15:00',1

--开始查询
SELECT * FROM @T1 a
WHERE EXISTS
(
SELECT 1 FROM @t1
WHERE tid > a.tid AND
deviceid = a.deviceid AND
userID = a.userID AND
abs(DATEDIFF(ss,usertime,a.usertime))<=60
)

--实际查询结果
/*(所影响的行数为 8 行)

tID userID userTime deviceid
----------- ------ ------------------------------------------------------ -----------
1 0001 2001-10-10 12:10:00.000 1
2 0001 2001-10-10 12:10:00.000 1
3 0001 2001-10-10 12:11:00.000 1
4 0001 2001-10-10 12:11:00.000 1
5 0001 2001-10-10 12:12:00.000 1
7 0001 2001-10-10 12:15:00.000 1

(所影响的行数为 6 行)
*/
回复
yunxiang 2003-12-10
select username ,date(tTime) ,count(ndevice)
from T
group by username date(tTime)
having count(ndevice)>=2
回复
yunxiang 2003-12-10
select username count(ndevice)
from T
group by username
having count(ndevice)>=2


这样写可以吗?

请执教~~~~~~~~~~~~~~!
回复
surfl 2003-12-09
victorycyz(中海,干活去,别在CSDN玩耍!) :
现在客户想要知道那些人在那些机器上什么时候多次消费了??
回复
hglhyy 2003-12-09
select time,ndevice,from (select idd,dptname, username,left(ttime,10) as time ndrvice,ngroup from T) having coung(*)>1
回复
victorycyz 2003-12-09
问题提得不好,现在给出:在一天内在同一台消费机器上消费多次(有二次或二次以上消费)的用户。

select username ,ndevice,vonvert(varchar(10),ttime,120) as 日期
from T
group by username,ndevice,convert(varchar(10),ttime,120)
having coung(*)>1
回复
发动态
发帖子
MS-SQL Server
创建于2007-09-28

3.2w+

社区成员

MS-SQL Server相关内容讨论专区
申请成为版主
社区公告
暂无公告