我有一个(MySQL)表,如下所示:
`radiostation_id` varchar(36) NOT NULL,
`song_id` varchar(36) NOT NULL,
`date` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
`length` int(4) NOT NULL
我想要做的是找到在15分钟内播放的每个song_id
。可能是这首歌在今天15:10播放,然后再播放15:20。所以我不应该自己设置间隔,它应该检查表格中的任何间隔,并列出它发生的所有歌曲和时间戳。
答案 0 :(得分:0)
你所要求的并不完全清楚。
如果要查找相同 song_id
的匹配项,其中具有相同song_id
的第二行的日期值在第一行的15分钟内,获得它的方法是这样的查询:
SELECT t.song_id
FROM looks_like_this t
WHERE EXISTS ( SELECT 1
FROM looks_like_this s
WHERE s.song_id = t.song_id
AND s.date >= t.date
AND s.date <= t.date + INTERVAL 15 MINUTE
AND NOT (s.radiostation_id = t.radiostation_id AND s.date = t.date)
如果您想要返回song_id
的唯一列表,请添加DISTINCT
关键字或GROUP BY t.song_id
子句。
获得结果的另一种方法是使用JOIN操作:
SELECT t.song_id
FROM looks_like_this t
JOIN looks_like_this s
ON s.song_id = t.song_id
AND s.date >= t.date
AND s.date <= t.date + INTERVAL 15 MINUTE
AND NOT (s.radiostation_id = t.radiostation_id AND s.date = t.date)
GROUP BY t.song_id
答案 1 :(得分:0)
以下内容将显示最后一次播放的最后15分钟内的所有行。
SELECT * FROM myTable
WHERE date>= NOW() - INTERVAL 15 MINUTE
请注意,在表列中使用日期是不好的做法,因为它是一个保留的mysql单词。
答案 2 :(得分:0)
在我看来,无论白天如何,你都希望在15分钟内播放一首歌。您可以使用date and time functions来解析所需的信息。例如,您可以使用TIME()
来提取列的时间部分。例如,您可以搜索在12:00和12:15之间播放的任何歌曲,如下所示:
SELECT DISTINCT id
FROM myTable
WHERE TIME(timeColumn) BETWEEN '12:00:00' AND '12:15:00';
这是我曾经尝试过的一点SQL Fiddle。
修改强>
根据我们在评论中的讨论,您可以使用以下查询。它将在song_id匹配的情况下自动加入表(因此您可以比较单个歌曲),时间不完全相同的条件(因此没有计数两次)和第二个时间间隔的条件表格在第一个的+/- 15分钟内如下:
SELECT m.song_id, m.timecolumn
FROM myTable m
JOIN myTable mt
ON m.song_id = mt.song_id
AND m.timeColumn != mt.timeColumn
AND mt.timeColumn BETWEEN DATE_SUB(m.timeColumn, INTERVAL 15 MINUTE) AND DATE_ADD(m.timeColumn, INTERVAL 15 MINUTE);
以下是更新的Fiddle。
答案 3 :(得分:0)
您只需要在播放时列出所有歌曲,如果在15分钟后再次播放,则连接到同一首歌。
select pt1.ID, pt1.StartDate, pt2.StartDate StartDate2
from PlayTimes pt1
join PlayTimes pt2
on pt2.ID = pt1.ID
and pt2.StartDate > pt1.StartDate
and pt2.StartDate <= Date_Add( pt1.StartDate, interval 15 minute );
你没有提到广播电台是否扮演任何角色。如果在15分钟内即使在不同的电台上再次播放,上面的查询也将返回一首歌曲。这是有道理的。如果您只需要在同一电台上15分钟内再次播放的歌曲,则将电台ID添加到连接条件。电台是否会这样做(在15分钟内播放同一首歌两次)?或者你是否正在检查以确保电台永远不会这样做?