[英]SQL join 2 tables without relationship
我想加入2個表。 但是,這兩個表沒有關聯或唯一標識符要加入。
這兩個表記錄了相同的信息:活動和不同網站上的活動持續時間。 表A包含活動的詳細時間日志,除了它不記錄網站名稱。 表B(如表A)還包含活動持續時間信息(不像A詳述),但它記錄了網站名稱。 兩個表都記錄相同,但包含不同的信息。
簡而言之:表A包含詳細的活動持續時間但沒有網站名稱,表B包含網站名稱,但沒有詳細的活動持續時間。 所以兩個表日志信息大致相同,除外
這是我的問題:
2個表
表A.
ID| Start | End | Key | Value
======================================================
1 | 2016-04-07 08:30| 2016-04-07 08:30| Busy | 12
1 | 2016-04-07 08:36| 2016-04-07 08:37| Logout| 345
1 | 2016-04-07 09:16| 2016-04-07 09:16| Login | 67
2 | 2016-04-07 08:10| 2016-04-07 08:11| Login | 45
2 | 2016-04-07 08:10| 2016-04-07 08:11| Write | 8
表B:
ID| Website | Date |
==================================
1 | A | 2016-04-07 08:32|
1 | A | 2016-04-07 08:39|
1 | B | 2016-04-07 09:17|
2 | A | 2016-04-07 08:12|
2 | A | 2016-04-07 08:14|
我正在尋找的結果:
ID| Start | End | Key | Value | Website |
==================================================================
1 | 2016-04-07 08:30| 2016-04-07 08:30| Busy | 12 | A |
1 | 2016-04-07 08:36| 2016-04-07 08:37| Logout| 345 | A |
1 | 2016-04-07 09:16| 2016-04-07 09:16| Login | 67 | B |
2 | 2016-04-07 08:10| 2016-04-07 08:11| Login | 45 | A |
2 | 2016-04-07 08:10| 2016-04-07 08:11| Write | 8 | A |
用戶可以同時在多個網站上進行活動。 我想要的結果是用戶已經處理的每個網站(表B)的活動名稱+持續時間(值)(表A)。
如果用戶僅在一個網站上登錄,我試過的LEFT OUTER JOIN
有效的:
SELECT a.ID, a.STart, a.End, a.Key, a.Value, b.Website
FROM TABLE A as a
LEFT OUTER JOIN TABLE B as b
on a.ID = b.ID
WHERE b.Date BETWEEN '2016-04-07' and '2016-04-08'
AND a.Start BETWEEN '2016-04-07' and '2016-04-08'
AND b.agentid = '1'
AND website is not NULL
GROUP BY a.ID, a.Start, a.End, a.Key, a.Value, b.Website
如果用戶登錄到2個網站,則聯接的值重復,每個網站的值(但我只想要用戶在該時間范圍內處理過的網站)。 我無法編輯這些表(A和B),但我可以創建新表。 我的問題:這是可能的,如果是這樣,我該怎么做?
outer apply
可能是最簡單的解決方案:
select a.*, b.website
from a outer apply
(select top 1 b.*
from b
where b.id = a.id and
b.date >= a.start
order by b.date desc
) b;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.