2009-08-12 83 views
1

新手在這裏,所以忍受着我...SQL - 查找記錄模式

是否有可能找到記錄模式?

我需要在無線電編程軟件的輸出中找到歌曲的重複SEQUENCES。

電臺管理員想知道某些其他歌曲的「下一首」是否隨着時間的推移重複出現,也就是說DJ是否正在偷懶並重復某些序列。

  1. 表由時間戳(日期時間-播出)有序
  2. '下一個' 被定義爲:

一)連續的(曲x的REC-沒有n個,歌曲雅(歌曲x有一個n的記號,廣告有一個n + 1的記錄,歌曲是n + 1的記錄)或

b) 2)

似乎無法找到獲取所需信息的方法。有任何想法嗎?

回答

2

如果它是一首又一首歌曲,假設一個名爲tblSongs並帶有'序列'&'名稱'列的表。你可能想嘗試像

select top N first.name, second.name, count(*) 
from tblSongs as first 
    inner join tblSongs as second 
     on second.sequence=first.sequence + 1 
group by first.name, second.name 
order by count(*) desc 

如果歌曲序列X,Y被計一樣Y,X,則

select top N first.name, second.name, count(*) 
from tblSongs as first 
    inner join tblSongs as second 
     on second.sequence=first.sequence + 1 
     or second.sequence=first.sequence - 1 
group by first.name, second.name 
order by count(*) desc 

如果您正在尋找2個歌曲序列的任何模式,那麼

select first.name, second.name, abs(second.sequence - first.sequence) as spacing_count 
from tblSongs as first 
    inner join tblSongs as second 
     on second.sequence=first.sequence + 1 
     or second.sequence=first.sequence - 1 

然後做一些關於spacing_count(這超出了我)的統計分析。

我相信那些會讓你開始。

+0

謝謝,將盡快嘗試! – staqUUR 2009-08-12 01:29:49

+0

那麼,在一個洞!謝謝約翰,我相信你給了我想要做的事情的基礎。現在進行費力的手動交叉檢查(嘆氣) – staqUUR 2009-08-12 04:06:00

0

我不確定您是否可以執行直接數據庫查詢來查找該查詢,但是如果您可以將ResultSet轉儲爲按時間戳排序的文件,則應該很容易弄明白。

想想這樣。假定一首歌是一個字符,並且時間戳排序的歌曲列表是一個字符串。例如。你必須通過以下其中A B和C是唯一歌曲表示的的SongList:

ABCACBABC     (Ignore ads for now) 

現在可以打入兩個相鄰字符(被稱爲雙字母組)的子序列這一點。

你得到的二元語法是:

AB, BC, CA, AC, CB, BA, BC 

現在你可以清楚地看到,BC兩字重複。要以編程方式執行此操作,可以將每個bigram引入HashMap(或Hashtable/HashSet),並根據HashMap查詢每個新的bigram以查看它是否包含它。如果地圖已經包含它,那麼這是一個重複。如果沒有,那麼它是一個新的,所以把它放進地圖。

在練習結束時,您將知道重複哪些組合。

現在來這裏的廣告都存在的情況下,可以調用所有廣告爲X.考慮序列

ABCXABCXXABCABC 

無論你有一個以上的廣告先後,(替換用硬換行符(你。被分割字符串分爲多個字符串),你會得到

ABCXABC 

< XX - 被替換成新行>

ABCAB 

現在用空字符串替換所有單個廣告。您將獲得

ABCABC 
ABCAB 

現在單獨處理每個字符串以識別重複。

希望它有效。

+0

感謝您的及時答覆。麥金太爾先生的詢問現在滿足了我的需求。但是......我預見未來甚至會有更多的疑問,而且他們可能不會像這個那麼容易解決。所以我會牢記你的想法,因爲它非常靈活。 感謝您的幫助。順便說一句,我在查詢結束時使用SQLite:'top N' - >'limit N'。 – staqUUR 2009-08-12 04:12:54