我一直在閱讀關於SQL連接的大量答案,但我似乎無法找到解決此問題的任何內容。我有兩張表,我想加入。第一個(j_weather)是天氣數據。它包含一個日期時間字段(稱爲「有效」),每小時至少有一個條目,但通常不止一個。第二張表(j_collisions)包含交通事故警察記錄數據。它有一個日期和時間字段(稱爲'date_time'),它被格式化爲一個字符串(我沒有創建表)。不過,我已經能夠解決這個問題,使用子字符串函數(這在我下面的SQL查詢中很明顯)。這兩個日期/時間字段的格式「YYYY-MM-DD HH:SS」左連接:如何在重複時只使用連接左表中的一個值?
我想要的結果是交通碰撞對數據集中的每個小時數:
date_hour | collisions
-----------------|------------
2005-12-01 00:00 | 0
2005-12-01 01:00 | 0
2005-12-01 02:00 | 1
2005-12-01 03:00 | 1
2005-12-01 04:00 | 0
2005-12-01 05:00 | 1
如果沒有衝突那個小時,它應該返回一個零。我不能僅僅從j_collisions表中進行選擇,因爲分析期間的每個小時都沒有崩潰,並且我希望每個小時都顯示出來,即使它只顯示零崩潰。
這是我構建查詢:
select
format(w.valid, 'yyyy-MM-dd HH') + ':00' as date_hour,
count(c.master_file_number) as collisions
from
hollings.dbo.j_weather as w
left join
hollings.dbo.j_collisions as c
on
format(w.valid, 'yyyy-MM-dd HH') = substring(c.date_time, 1, 13)
group by
format(w.valid, 'yyyy-MM-dd HH')
order by
date_hour
然而,因爲正如我上面提到的,幾個小時對天氣的讀數多個記錄。因此,例如,如果2005-12-01的03:00有三次天氣讀數,我的結果將(錯誤地)讀取如下,而不是上述正確的預期結果。注意在03:00小時發生3次碰撞的結果,而不是正確的1次碰撞。
date_hour | collisions
-----------------|------------
2005-12-01 00:00 | 0
2005-12-01 01:00 | 0
2005-12-01 02:00 | 1
2005-12-01 03:00 | 3
2005-12-01 04:00 | 0
2005-12-01 05:00 | 1
我與SQL初學者,但我已經嘗試了許多選項,我能想到的/發現網上。如果我錯過任何細節,我會提前道歉,這是我第一次在這裏提問。任何幫助將不勝感激!
嘗試尋找到一個聯合查詢。它消除了重複,並將你想要的特定數據合併到一個表中 – cdomination