[英]Records by matching and non-matching DateTime
請幫助我弄清楚以下邏輯。 當B.DateTime匹配E.DateTime時,則獲取E.Location。 當B.DateTime <> E.DateTime時,則從先前/較早的E.DateTime中獲取E.Location。 請在“(城市A”,“城市B”,“城市C”,“城市E”,“城市F”,“城市G”,“城市X”,“城市Y”)中包括WHERE位置。 我會感激你的 這是sqlfiddle: http ://sqlfiddle.com/#!6/8eb014/1
Base table as B
Id DateTime
201 2015-05-03 08:01
301 2015-05-03 08:20
401 2015-05-03 08:40
Extract Table as E
Id DateTime Location
201 2015-05-03 07:50 City A
201 2015-05-03 08:01 City B
201 2015-05-03 08:50 City C
301 2015-05-03 07:15 City E
301 2015-05-03 08:01 City F
301 2015-05-03 08:20 City G
401 2015-05-03 07:15 City X
401 2015-05-03 08:55 City Y
Desired Result:
Location Id DateTime
City B 201 2015-05-03 08:01
City G 301 2015-05-03 08:20
City X 401 2015-05-03 07:15
我在sqlfiddle上嘗試了以下代碼,但執行時遇到問題:
select B.id, coalesce(E.Location,F.Location),coalesce(E.DateTime,F.DateTime)
from Base B
inner join Extract E
on B.id = E.id
and B.DateTime = E.DateTime
and E.Location in ('City A','City B','City C','City E','City F','City G','City X','City Y')
left join Extract F
on B.id = F.id
and F.DateTime < B.DateTime
and F.Location in ('City A','City B','City C','City E','City F','City G','City X','City Y')
當我用實際數據運行此邏輯時,得到以下結果。
Location Id DateTime
City B 201 2015-05-03 08:01
City G 301 2015-05-03 08:20
ID 401丟失了。
嘗試這個。 它將按第一個匹配的日期排序,然后按日期排序:
select B.id, ca.dt, ca.location
from B
cross apply(select top 1 location, dt
from E
where B.id = E.id
order by case when B.dt = E.dt then 1 else 0 end desc,
E.dt)ca
請嘗試以下查詢。 您正在B和E上使用內部聯接,它在datetime字段上過濾掉401,因為e沒有它。
select distinct b.id,coalesce(e.location,a.location) ,coalesce(e.datetime,a.dt)
from base b
left outer join extract e
on b.id = e.id
and b.datetime = e.datetime
and E.Location in ('City A','City B','City C','City E','City F','City G','City X','City Y')
inner join
(
select b2.id,f.location,max(f.datetime) as dt from base b2 join extract f on b2.id = f.id and b2.datetime <> f.datetime
where f.datetime < b2.datetime
group by b2.id,f.location
) a
on b.id = a.id
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.