新手来了,所以请容忍我..。
是否有可能找到记录的模式?
我需要在广播节目软件的输出中找到重复的歌曲序列。
电台经理想知道某些歌曲“旁边”是否会随着时间的推移而重复(如果DJ变得懒惰并重复某些序列)。
表由时间戳排序,(datetime-aired)
(歌x有n的rec-no,n+1的歌y有rec-no )或
b)由一个广告分隔(歌x有n的rec-no,广告有n+1的rec-no,n+2的歌y是rec-no )。
似乎想不出办法来获取我需要的信息。有什么想法吗?
发布于 2009-08-12 01:22:32
如果是一首接一首歌,那么假设一个名为tblSongs的表带有一个'sequence‘& 'name’列。你可能想试一试
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做一些统计分析(这超出了我的能力)。
我相信这会让你开始。
发布于 2009-08-12 01:47:08
我不确定您是否可以执行直接的数据库查询来找到它,但是如果您可以将ResultSet转储到一个按时间戳排序的文件中,那么应该很容易找到它。
这样想吧。假设歌曲是一个字符,按时间戳排序的歌曲列表是一个字符串。例如,您有一个歌曲列表,其中A、B和C是独特的歌曲,如下所示:
ABCACBABC (Ignore ads for now)现在,您可以将其分解为相邻两个字符(称为bigram)的子序列。
你得到的重要信息是:
AB, BC, CA, AC, CB, BA, BC现在您可以清楚地看到BC是重复的。要以编程方式完成此操作,您可以将每个bigram抛到HashMap (或Hashtable/HashSet)中,并针对HashMap查询每个新的bigram,以查看它是否包含它。如果地图已经包含了它,那么它就是一个重复。如果不是,那么它是一个新的,所以把它放在地图上。
在本练习结束时,您将知道哪些组合是重复的。
现在来看看广告存在的情况,让我们将所有的广告称为X。
ABCXABCXXABCABC在有多个广告的地方,(用硬行中断代替(将字符串划分为多个字符串)。你会得到
ABCXABC<__XX -被一个新的line>取代
ABCAB现在用空字符串替换所有单个广告。你会得到
ABCABC
ABCAB现在独立处理每个字符串以识别重复。
希望它能成功。
https://stackoverflow.com/questions/1263780
复制相似问题