把A表中的時間取一天中最大、最小的時間更新到B表中,要求A表和B表中的ID和 date要關聯.
說明:A表的id和B表的id可能存在不完全相符,A表中每個id的同一天的時間記錄可能存在多條記錄
B表的每個id一個月的每天都有一條記錄(比如每個id在9月有30天記錄),datea的時間要求<'8:30:00' dateb的時間要求>'18:30:00'
供參考的SQL如下:
update B
set B.datea = isnull(s.minDate, B.datea), B.dateb = isnull(s.maxDate, B.dateb)
from (
-- 按id, dateValue(即日期值e799bee5baa6e58685e5aeb931333335333733) 取得最大值,最小值
select s0.id, s0.dateValue, max(s0.date) as maxDate, min(s0.date) as minDate
from (
-- 將A.date的值轉成不帶時分秒的日期值dateValue,並計算出當日的秒數值valSeconds
select A.id, A.date, convert(datetime, convert(nvarchar(30), A.date, 101), 101) as dateValue, datepart(hh, A.date) * 3600 + datepart(mi, A.date) * 60 + datepart(ss, a.date) as valSeconds
from A
) s0
-- 將數據值限制在8:30以前, 18:30之後, 用秒數值比較的結果,精確到秒數
where (s0.valSeconds < 8 * 3600 + 30 * 60 or s0.valSeconds > 18 * 3600 + 30 * 60)
group by s0.id, s0.dateValue
) s
where B.ID = s.id and B.date = s.date