2017-05-05 72 views
1

我需要提取信息被錯誤地插入到數據庫中的所有行。基本上,一個人不能一次進入2個會話,所以我想獲得2個會話重疊的所有行。需要選擇一個人的單獨會話重疊的行

我有我從以前問的問題建立在,但似乎無法得到公正的重疊會話數據下面的代碼。

SELECT 
     a.[abc_id] 
     ,a.[abc_person] 
     ,a.[abc_date] 
     ,a.[abc_duration] 



FROM [flx_Session] a 
JOIN [flx_Session] b on a.abc_date <= (DATEADD(MINUTE, b.abc_duration, b.abc_date)) 
    AND (DATEADD(MINUTE, a.abc_duration, a.abc_date)) >= b.abc_date 
    AND a.abc_person != b.abc_person 
+0

只是爲了澄清,如果史密斯先生在09.30開始的SessionID用60分鐘(10:30結束),他不能同時在10.00與已啓動一個會話ID的持續時間持續45分鐘(或者任何時間)。這些是我想要提取的行。非常感謝任何幫助提前 – MisterO

回答

0

除了連接子句的最後部分外,第一眼看起來是正確的。

試試這個:

select 
    a.[abc_id] 
    , a.[abc_person] 
    , a.[abc_date] 
    , a.[abc_duration] 
from [cedar].[dbo].[flx_Session] a 
    join [cedar].[dbo].[flx_Session] b 
    on a.abc_date < dateadd(minute, b.abc_duration-1, b.abc_date) 
    and dateadd(minute, a.abc_duration-1, a.abc_date) > b.abc_date 
    and a.abc_person = b.abc_person 
    and a.abc_id != b.abc_id 
+0

這是非常多的修復它。 – MisterO

+0

另一個小增加是,當分鐘被連續會話四捨五入時,我得到2條記錄重疊,所以我想省略這些。即會議1是在10:00 - 11:00開始的60分鐘;第二節是60分鐘,從10:59 - 11:59開始。基本上這些應該被允許,因爲四捨五入導致了重疊。我當時的想法是到)或者降低會話持續時間延長1分鐘1或回遷第一節開始時1分鐘 二)提高會議2的啓動時間1分鐘 – MisterO

+0

JOIN [CEDAR] [DBO]。[ flx_learnerSupportSession] b關於a.lss_date <= DATEADD(分,b.lss_duration,b.lss_date) AND DATEADD(分,a.lss_duration - 1),a.lss_date)> = DATEADD(分,1,b.lss_date) – MisterO