2009-08-12 97 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