卡号 换卡日期 姓名
-----------------------
001 2013-01-01 张三
001 2013-01-05 李四
001 2013-01-10 王五
001 2013-01-17 赵六现在从TXT里提取数据,得到卡号"001"与日期"2013-01-07",我如何查询接到这笔数据是李四的
-----------------------
001 2013-01-01 张三
001 2013-01-05 李四
001 2013-01-10 王五
001 2013-01-17 赵六现在从TXT里提取数据,得到卡号"001"与日期"2013-01-07",我如何查询接到这笔数据是李四的
-----------------------
001 2013-01-01 张三
001 2013-01-05 李四
001 2013-01-10 王五
001 2013-01-17 赵六现在从TXT里提取数据,得到卡号"001"与日期"2013-01-07",我如何查询接到这笔数据是李四的意思是卡号"001",日期"2013-01-07" 这笔考勤数据应该是归李四,因为卡号重复..只能从日期着手
因为卡号一样的情况下..日期"2013-01-07" 是属于"2013-01-05" 到给王五"2013-01-10"这个范围
所以接到这笔数据应该给李四
select *
from tb
where id='0001' and 换卡日期='2013-01-05'难道你想要的不是这样?
-- Author :DBA_Huangzj(發糞塗牆)
-- Date :2013-03-25 17:15:07
-- Version:
-- Microsoft SQL Server 2008 R2 (SP1) - 10.50.2500.0 (X64)
-- Jun 17 2011 00:54:03
-- Copyright (c) Microsoft Corporation
-- Enterprise Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1, v.721)
--
----------------------------------------------------------------
--> 测试数据:[huang]
if object_id('[huang]') is not null drop table [huang]
go
create table [huang]([卡号] varchar(3),[换卡日期] datetime,[姓名] varchar(4))
insert [huang]
select '001','2013-01-01','张三' union all
select '001','2013-01-05','李四' union all
select '001','2013-01-10','王五' union all
select '001','2013-01-17','赵六'
--------------开始查询--------------------------
SELECT TOP 1
*
FROM huang
WHERE [卡号] = '001' AND ABS(DATEDIFF(dd, '2013-01-07', [换卡日期])) <= ( SELECT MIN(ABS(DATEDIFF(dd,
'2013-01-07',
[换卡日期]))) ddiff
FROM huang
WHERE [卡号] = '001'
)
----------------结果----------------------------
/*
卡号 换卡日期 姓名
---- ----------------------- ----
001 2013-01-05 00:00:00.000 李四
*/
where infm_date = (select MAX(infm_date) from HR_PERCARD where CARD_NO = '00956231' and infm_date <= '20130401')