>MEETINGID BEGINTIME ENDTIME ISBLOCK BLOCKID BLOCKMEMBER >INT DT DT BIT INT BIT >------------------------------------------------------------------------ >1 12/14/2001 07:00 12/14/2001 11:00 1 1 0 >2 12/14/2001 07:00 12/14/2001 07:45 0 1 1 >3 12/14/2001 07:45 12/14/2001 07:55 0 1 1 >4 12/14/2001 07:55 12/14/2001 08:40 0 1 1 >>
Select mb.blockid, SUM(DATEDIFF( mi, mb.BEGINTIME, mb.ENDTIME))/COUNT(*) AS blocktime, SUM( DATEDIFF( mi, ap.BEGINTIME, ap.ENDTIME)) AS usedtime, CAST( SUM( DATEDIFF( mi, ap.BEGINTIME, ap.ENDTIME)) AS numeric(5,2)) / SUM( DATEDIFF( mi, mb.BEGINTIME, mb.ENDTIME)) * COUNT(*) AS used FROM meetings mb JOIN meetings ap ON mb.BLOCKID = ap.BLOCKID AND mb.ISBLOCK = 1 AND ap.BLOCKMEMBER = 1 GROUP BY mb.blockidThere's more elegant SQL Servet version
Select ap.blockid, CAST( CAST( SUM( DATEDIFF( mi, ap.BEGINTIME, ap.ENDTIME)) AS numeric(7,2)) / ( Select CAST(DATEDIFF( mi, mb.BEGINTIME, mb.ENDTIME) AS numeric(7,2)) FROM meetings mb WHERE mb.ISBLOCK = 1 and mb.BLOCKID = ap.BLOCKID ) AS numeric(7,2)) as used FROM meetings ap WHERE ap.BLOCKMEMBER = 1 GROUP BY ap.blockid