2014-10-29 41 views
1

我不完全確定這是一個很好的問題標題,但我會盡可能在身體中解釋。蜂巢:對每一行重複SELECT

我與萬首歌曲數據集工作,從http://labrosa.ee.columbia.edu/millionsong/

我的最終目標是創造着「相似歌曲」的線,我拿一首歌曲,並獲得基於今年類似的歌曲什麼的,持續時間等

我必須設置爲

CREATE TABLE IF NOT EXISTS songs(genre String, artist String, danceability Double, duration Double, loudness Double, similarArtists String, hotness Double, title String) PARTITIONED BY(year String) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'; 

我的問題在蜂巢表中的數據來因爲在JOIN蜂房不支持的不平等。

理想情況下,我想有一個像

SELECT songs.artist, songs.title, t2.title FROM songs JOIN songs as t2 ON songs.year > t2.year -5 AND songs.year < t2.year +5; 

查詢然而這是不可能的現在。我目前難以嘗試我的類似歌曲查詢的最佳方式。這是可能做到這一點在SELECT statment

SELECT title FROM songs WHERE year < 2000 + 5 AND year > 2000 - 5; 

但我不能確定如何在每一行運行此,同時採取apropriate值而不是硬編碼2005的IE瀏覽器:

SELECT title FROM songs WHERE year < song.year + 5 AND year > song.year-5; 

有沒有人遇到這樣的情況,或有任何我可以嘗試的整體想法?

回答

1

你可以做一個交叉連接和WHERE子句中的子集:

select songs.artist, songs.title, t2.title 
from songs 
cross join songs as t2 
where songs.year between (t2.year - 5) and (t2.year + 5) 
; 

記住上面也將每首歌曲匹配本身。如果需要,您需要另一個限制來刪除這些記錄。

+0

非常感謝,我不知道關於between子句。 – 2014-11-02 16:33:30