2012-06-20 17 views
2

所以,我有以下數據represets小時和刻鐘許多員工如何安排工作。計算,如果有一小時至少有一半雙重覆蓋

Hour    QuarterHour   EmployeesWorking 
13:00:00.0000000 13:00:00.0000000 2 
13:00:00.0000000 13:15:00.0000000 1 
13:00:00.0000000 13:30:00.0000000 1 
13:00:00.0000000 13:45:00.0000000 1 
14:00:00.0000000 14:00:00.0000000 5 
14:00:00.0000000 14:15:00.0000000 1 
14:00:00.0000000 14:30:00.0000000 2 
14:00:00.0000000 14:45:00.0000000 1 

我需要能夠拉動約在職員工的最高,但僅以該報道是在至少兩個季度。因此,在我上面的數據中,我會在13:00時返回1,在14:00時返回2。

的一個很好的辦法做到這一點任何想法?我一直試圖去很多不同的計算(最大,SUM(EmployeesWorking)/ 2等),他們讓我接近,但我需要精確計數。

感謝

+0

如何計算最大?爲13:00我想給2(第一個記錄在表給你2),以及14:00我想給5(14:00創紀錄的有5個工作) – trailmax

+1

@trailmax - '但只有在該報道中至少兩個quarters' – MatBailie

+0

的@Dems:是的,謝謝 – Limey

回答

2

你總是會被採摘第2項:如果您需要按小時內算的,所以這樣做:

SELECT * FROM 
(
    SELECT ROW_NUMBER() 
     OVER (PARTITION BY Hour ORDER BY EmployeesWorking DESC) AS RowNum, * 
    FROM Table 
) AS Agg 
WHERE RowNum = 2 
+2

它是* always *第二個值,當數值按降序排列時......'5,2,1,1' =>'2' *(在OP示例中)*和'4,4 ,3,2' =>'4' *(遵循OP的英文邏輯。)*無需檢查「COUNT()= 2」。 *** [現在,你只需要顯示OP如何做到這一點;]] *** – MatBailie

+0

@Dems真的,我想它可以進一步簡化,現在創建一個小提琴 –

+0

Psst - 你已經放棄了這一點 - > 'desc' –

1

看起來很簡單 - 你想從每個最大值小時,丟棄一個最高值。這聽起來像ROW_NUMBER 2對我說:

;with OrderedWork as (
    select [Hour],EmployeesWorking,ROW_NUMBER() OVER (PARTITION BY [HOUR] ORDER BY EmployeesWorking desc) as rn 
    from @schedule 
) 
select * from OrderedWork where rn=2 

結果:

Hour    EmployeesWorking rn 
---------------- ---------------- -------------------- 
13:00:00.0000000 1    2 
14:00:00.0000000 2    2 

如果有,例如,兩個5 S IN的14:00小時,然後相應小時的結果將是5 - 因爲一個那些行的會來第二(但哪一個是未知的)。

請注意,不同的窗口功能(例如RANK)將不合適,因爲不需要想要將綁定結果合併在一起。


數據設置:

declare @schedule table ([Hour] time,QuarterHour time,EmployeesWorking int) 
insert into @schedule ([Hour], QuarterHour, EmployeesWorking) values 
('13:00:00.0000000','13:00:00.0000000',2), 
('13:00:00.0000000','13:15:00.0000000',1), 
('13:00:00.0000000','13:30:00.0000000',1), 
('13:00:00.0000000','13:45:00.0000000',1), 
('14:00:00.0000000','14:00:00.0000000',5), 
('14:00:00.0000000','14:15:00.0000000',1), 
('14:00:00.0000000','14:30:00.0000000',2), 
('14:00:00.0000000','14:45:00.0000000',1) 
相關問題