数据如下:工号, 日期, 时间080814 20100410 07:00
080814 20100410 07:36
080814 20100410 20:00
080814 20100411 20:00
080815 20100411 07:00
080815 20100410 09:36
080816 20100410 20:00公司员工每天有多次刷卡,我需要每个员工,每天的,第一笔,后最后一笔刷卡记录
比如工号 日期 第一笔 最后一笔
080814 20100410 07:00 20:00
080814 20100410 07:36
080814 20100410 20:00
080814 20100411 20:00
080815 20100411 07:00
080815 20100410 09:36
080816 20100410 20:00公司员工每天有多次刷卡,我需要每个员工,每天的,第一笔,后最后一笔刷卡记录
比如工号 日期 第一笔 最后一笔
080814 20100410 07:00 20:00
-- Author :fredrickhu(小F,向高手学习)
-- Date :2010-04-22 14:49:43
-- Verstion:
-- Microsoft SQL Server 2005 - 9.00.4053.00 (Intel X86)
-- May 26 2009 14:24:20
-- Copyright (c) 1988-2005 Microsoft Corporation
-- Developer Edition on Windows NT 5.1 (Build 2600: Service Pack 3)
--
----------------------------------------------------------------
--> 测试数据:[tb]
if object_id('[tb]') is not null drop table [tb]
go
create table [tb]([工号] varchar(6),[日期] datetime,[时间] sql_variant)
insert [tb]
select '080814','20100410 07:00',null union all
select '080814','20100410 07:36',null union all
select '080814','20100410 20:00',null union all
select '080814','20100411 20:00',null union all
select '080815','20100411 07:00',null union all
select '080815','20100410 09:36',null union all
select '080816','20100410 20:00',null
--------------开始查询--------------------------
select 工号,日期,min(时间) as 第一笔,max(时间) as 最后一笔 from tb group by 工号,日期
----------------结果----------------------------
/* 工号 日期 第一笔 最后一笔
------ ----------------------- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
080814 2010-04-10 07:00:00.000 NULL NULL
080814 2010-04-10 07:36:00.000 NULL NULL
080815 2010-04-10 09:36:00.000 NULL NULL
080814 2010-04-10 20:00:00.000 NULL NULL
080816 2010-04-10 20:00:00.000 NULL NULL
080815 2010-04-11 07:00:00.000 NULL NULL
080814 2010-04-11 20:00:00.000 NULL NULL
警告: 聚合或其他 SET 操作消除了空值。(7 行受影响)*/
-- Author : htl258(Tony)
-- Date : 2010-04-22 14:49:02
-- Version:Microsoft SQL Server 2008 (RTM) - 10.0.1600.22 (Intel X86)
-- Jul 9 2008 14:43:34
-- Copyright (c) 1988-2008 Microsoft Corporation
-- Developer Edition on Windows NT 5.1 <X86> (Build 2600: Service Pack 3)
--------------------------------------------------------------------------
--> 生成测试数据表:tbIF NOT OBJECT_ID('[tb]') IS NULL
DROP TABLE [tb]
GO
CREATE TABLE [tb]([a] NVARCHAR(10),[b] DATETIME,[c] NVARCHAR(10))
INSERT [tb]
SELECT '080814','20100410','07:00' UNION ALL
SELECT '080814','20100410','07:36' UNION ALL
SELECT '080814','20100410','20:00' UNION ALL
SELECT '080814','20100411','20:00' UNION ALL
SELECT '080815','20100411','07:00' UNION ALL
SELECT '080815','20100410','09:36' UNION ALL
SELECT '080816','20100410','20:00'
GO
--SELECT * FROM [tb]-->SQL查询如下:
select a 工号,b 日期,第一笔=MIN([c]),最后一笔=MAX(c)
from tb
group by a,b
/*
工号 日期 第一笔 最后一笔
---------- ----------------------- ---------- ----------
080814 2010-04-10 00:00:00.000 07:00 20:00
080815 2010-04-10 00:00:00.000 09:36 09:36
080816 2010-04-10 00:00:00.000 20:00 20:00
080814 2010-04-11 00:00:00.000 20:00 20:00
080815 2010-04-11 00:00:00.000 07:00 07:00(5 行受影响)
*/
drop table tb
Go
Create table tb([工号] Datetime,[日期] Datetime,[时间] nvarchar(5))
Insert tb
select '080814','20100410',N'07:00' union all
select '080814','20100410',N'07:36' union all
select '080814','20100410',N'20:00' union all
select '080814','20100411',N'20:00' union all
select '080815','20100411',N'07:00' union all
select '080815','20100410',N'09:36' union all
select '080816','20100410',N'20:00'
Go
Select [工号],
[日期],
[第一笔]=(select top 1 [时间]
from tb
where [工号]=t.[工号] and [日期]=t.[日期] order by [时间]),
[最后一笔]=(select top 1 [时间]
from tb
where [工号]=t.[工号] and [日期]=t.[日期] order by [时间]desc)
from tb t
group by [工号],[日期]
/*
工号 日期 第一笔 最后一笔
----------------------- ----------------------- ----- -----
2008-08-14 00:00:00.000 2010-04-10 00:00:00.000 07:00 20:00
2008-08-14 00:00:00.000 2010-04-11 00:00:00.000 20:00 20:00
2008-08-15 00:00:00.000 2010-04-10 00:00:00.000 09:36 09:36
2008-08-15 00:00:00.000 2010-04-11 00:00:00.000 07:00 07:00
2008-08-16 00:00:00.000 2010-04-10 00:00:00.000 20:00 20:00(5 個資料列受到影響)
*/
select 工号,日期,[第一笔] = min(时间),[最后一笔] = max(时间) from tb group by 工号,日期
SELECT 工号, 日期 ,MIN(时间) 第一笔,MAX(时间) 最后一笔 FROM TB GROUP BY 工号, 日期
select 工号,日期,min(时间) 第一笔,max(时间) 最后一笔
from tb
group by 工号,日期
select 工号,日期,min(时间) as [第一笔],max(时间) as [最后一笔] from tb group by 工号,日期
(
P int,
Date_Time datetime
)
insert into tb(P,Date_Time)
(
select 120,'2010-04-01 00:00:00.000' union
select 465,'2010-04-01 00:15:00.000 ' union
select 234,'2010-04-01 00:30:00.000' union
select 876,'2010-04-01 00:45:00.000' union
select 345,'2010-04-01 01:00:00.000 '
)
select max(P),min(P)from tb
group by CONVERT(varchar(8),Date_Time,112)
go
select * from [表名] where CONVERT(varchar(8),[列名],112)=CONVERT(varchar(8),GetDate(),112)
go
数据如下:工号, 日期, 时间080814 20100410 07:00
080814 20100410 07:36
080814 20100410 20:00
080814 20100411 20:00
080815 20100411 07:00
080815 20100410 09:36
080816 20100410 20:00
go
公司员工每天有多次刷卡,我需要每个员工,每天的,第一笔,后最后一笔刷卡记录
比如工号 日期 第一笔 最后一笔
080814 20100410 07:00 20:00
go
create table tb2
(
id varchar(10),
[datetime] varchar(20),
[hour] datetime
)
go
delete from tb2
go
insert into tb2(id,[datetime],[hour])
(
select '080814','20100410','07:00' union
select '080814','20100410','07:36' union
select '080814','20100410','20:00' union
select '080814','20100411','20:00' union
select '080815','20100411','07:00' union
select '080815','20100410','09:36' union
select '080815','20100410','20:00'
)select * from tb2
go
select id,CONVERT(varchar(100),convert(datetime,[datetime],118),23),min(convert(varchar(10),[hour],108)),max(convert(varchar(10),[hour],108))
from tb2 group by id,[datetime]
go
select a.*,[第一笔]=(select top 1 时间 from tt where 工号=a.工号 and 日期=a.日期 order by 时间),
[最后一笔]=(select top 1 时间 from tt where 工号=a.工号 and 日期=a.日期 order by 时间 desc)
(select distinct 工号,日期 from tt) as a