1樓:匿名使用者
資料如下
create table test
(姓名 varchar(10),
日期 varchar(5),
時間 varchar(5),
型別 varchar(4))
insert into test values ('張三','09-05','08:00','mj01')
insert into test values ('張三','09-05','08:05','mj02')
insert into test values ('張三','09-05','10:15','mj02')
insert into test values ('張三','09-05','10:20','mj01')
insert into test values ('李四','09-05','08:00','mj01')
insert into test values ('李四','09-05','08:05','mj02')
執行select t1.姓名,t1.型別+'>'+t2.
型別 出入方向,datediff(minute,cast('2013-'+t1.日期+' '+t1.時間 as datetime),cast('2013-'+t2.
日期+' '+t2.時間 as datetime)) 用時
from
(select row_number() over (partition by 姓名 order by 日期+時間) rn,* from test) t1,
(select row_number() over (partition by 姓名 order by 日期+時間) rn,* from test) t2
where t1.姓名=t2.姓名 and t1.rn=t2.rn-1 and t1.型別<>t2.型別 and t1.日期=t2.日期
結果以上語句僅限使用於sqlserver2005以上版本或oracle10g以上版本
2樓:匿名使用者
難點在於把一對資料劃分到一起。我這裡通過分組排序
select *,row_number() over (partition by [姓名] order by 時間) seq from tmp
得到下表:
這樣,每個奇數和比它大1的偶數就是一對。當然,如果原表中每一對資料並不是相鄰的,我這個方法就不對了。這時需要其他的劃分方法。
(最合理的方式是增加一個批次欄位,同一對記錄的批次相同,不同對記錄的批次不同)
下面是完整**:
with tmp([姓名],[日期],[時間],[型別]) as (
select '張三','09-05','08:00','mj01' union all
select '張三','09-05','08:05','mj02' union all
select '張三','09-05','10:15','mj02' union all
select '張三','09-05','10:20','mj01' union all
select '李四','09-05','08:00','mj01' union all
select '李四','09-05','08:05','mj02')
select a.[姓名],a.[日期],
a.[型別]+'>'+b.[型別] [出入方向],
datediff(mi,convert(datetime,'2013-'+a.[日期]+' '+a.[時間]+':00')
,convert(datetime,'2013-'+b.[日期]+' '+b.[時間]+':00'))[用時]
from (
select *,row_number() over (partition by [姓名] order by 時間) seq from tmp
) a inner join (
select *,row_number() over (partition by [姓名] order by 時間) seq from tmp
) b on a.[姓名]=b.[姓名] and a.[日期]=b.[日期]
and a.seq+1=b.seq and a.seq=2*(a.seq/2)+1
結果如下:
電腦配置問題,請教各位大大
看你玩什麼遊戲了,如果不是什麼大型遊戲,就建議你amd雙核,2g記憶體,320g硬碟,顯示卡就用個七彩虹的,主機板華碩支援這配置就行了,320w電源,顯示器19寸三星或華碩 3500 玩遊戲,配置來了 intel i3 2120 720 華碩p8h61 m le 450 記憶體 金士頓ddr3 13...
請教關於SQL日期計算的問題,請教一個關於SQL日期計算的問題
首先要把表單提交過來的日期轉換成一個日期字串,如 datestr request date datestr left datestr,4 right datestr,4 datestr left datestr,7 right datestr,2 然後把sql語句改成 sql select date...
緊急請教各位關於體檢的問題
穆藥師提醒你 就是你所說的體檢專案是不會驗出你所吃的藥物的!這些體檢專案只是一些非常常規的檢查,沒有特殊檢查!本人提醒你如下 檢查是具有針對性,而不是針對藥的成分來的,所以應該不會檢查出你吃了什麼藥。看來你想取得一個比較理想的檢查結果吧。但事實上即使吃藥也不一定能改變檢查結果,因為有些病毒是蛋白質外...