关于筛选记录的问题

sztxh 2006-03-16 05:53:46
ID 卡号 日期 考勤机号
2 00011 2006-03-01 06:35:00.000 03
2 00011 2006-03-01 07:39:00.000 03
2 00011 2006-03-01 07:55:00.000 03
2 00011 2006-03-01 18:16:00.000 03

2 00011 2006-03-02 05:55:00.000 03
2 00011 2006-03-02 06:23:00.000 03
2 00011 2006-03-02 07:35:00.000 03
2 00011 2006-03-02 12:05:00.000 03
2 00011 2006-03-02 17:54:00.000 03

2 00011 2006-03-03 05:29:00.000 03
2 00011 2006-03-03 08:01:00.000 03
2 00011 2006-03-03 12:03:00.000 03
2 00011 2006-03-03 18:30:00.000 03

这些是三天的记录,我的要求是取出这个ID号的每天第一条和最后一条记录,但有一个限制,
就是每天的第一条记录必须是早上6:00到8:00的一条记录,如果6:00至8:00有多条记录,那么取距
6:00最近的那个记录,如果这段时间没有记录,那么取8:00最近的一条记录!

我要得到最终的结果是
ID 卡号 日期 考勤机号
2 00011 2006-03-01 06:35:00.000 03
2 00011 2006-03-01 18:16:00.000 03

2 00011 2006-03-02 06:23:00.000 03
2 00011 2006-03-02 17:54:00.000 03

2 00011 2006-03-03 08:01:00.000 03
2 00011 2006-03-03 18:30:00.000 03

不知我这样的描述是否清楚,请各位帮帮忙解答!


...全文
81 点赞 收藏 9
写回复
9 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
sztxh 2006-03-25
谢谢各位的支持,结帐了,估计问题太难
回复
sztxh 2006-03-23
还是达不到我的要求,期盼别的答案
回复
tian790317 2006-03-22
二楼和四楼的基本能解决,不过是多天的数据的话就要按天分组了
回复
sztxh 2006-03-22
还有其他答案吗
回复
sztxh 2006-03-17
这个问题难度挺大的,特别是这个要求
就是每天的第一条记录必须是早上6:00到8:00的一条记录,如果6:00至8:00有多条记录,那么取距6:00最近的那个记录,如果这段时间没有记录,那么取8:00最近的一条记录!
回复
sztxh 2006-03-17
奇怪,问题数据怎么挤在一起呢,原始问题是
ID 卡号 日期 机器号
2 00011 2006-03-01 06:35:00.000 03
2 00011 2006-03-01 07:39:00.000 03
2 00011 2006-03-01 07:55:00.000 03
2 00011 2006-03-01 18:16:00.000 03

2 00011 2006-03-02 05:55:00.000 03
2 00011 2006-03-02 06:23:00.000 03
2 00011 2006-03-02 07:35:00.000 03
2 00011 2006-03-02 12:05:00.000 03
2 00011 2006-03-02 17:54:00.000 03

2 00011 2006-03-03 05:29:00.000 03
2 00011 2006-03-03 08:01:00.000 03
2 00011 2006-03-03 12:03:00.000 03
2 00011 2006-03-03 18:30:00.000 03

要得到效果是:

这些是三天的记录,我的要求是取出这个ID号的每天第一条和最后一条记录,但有一个限制,
就是每天的第一条记录必须是早上6:00到8:00的一条记录,如果6:00至8:00有多条记录,那么取距
6:00最近的那个记录,如果这段时间没有记录,那么取8:00最近的一条记录!

我要得到最终的结果是
ID 卡号 日期 考勤机号
20 0011 2006-03-01 06:35:00.000 03
20 0011 2006-03-01 18:16:00.000 03

20 0011 2006-03-02 06:23:00.000 03
20 0011 2006-03-02 17:54:00.000 03

20 0011 2006-03-03 08:01:00.000 03
20 0011 2006-03-03 18:30:00.000 03
回复
rivery 2006-03-16
select * from tbl a where 日期=(
Select top 1 日期 from tbl
where ID=a.ID and 卡号=a.卡号 and datepart(hh,日期) between 6 and 8 order by 日期)
union
select * from tbl a where 日期=(
Select top 1 日期 from tbl
where ID=a.ID and 卡号=a.卡号 order by 日期 desc)
order by ID,卡号,日期
回复
meiyaojun 2006-03-16
hehe, 顶一下先.
回复
WangZWang 2006-03-16
select * from tbl a where 日期=(
Select top 1 日期 from tbl
where ID=a.ID and 卡号=a.卡号 order by 日期)
union
select * from tbl a where 日期=(
Select top 1 日期 from tbl
where ID=a.ID and 卡号=a.卡号 order by 日期 desc)
order by ID,卡号,日期
回复
相关推荐
发帖
疑难问题
创建于2007-09-28

2.1w+

社区成员

MS-SQL Server 疑难问题
申请成为版主
帖子事件
创建了帖子
2006-03-16 05:53
社区公告
暂无公告