簡體   English   中英

SQL連接沒有關系的2個表

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM