我正在寻找为什么我的代码在这里不再工作的任何帮助。原始代码和修改代码的 SQL Fiddle 链接。我将我的数据库放在两个不同的表中,这段代码运行良好。
SELECT DATE_FORMAT(a.show_date,'%m/%d/%y') as show_date, a.song_order, a.show_id,
b.song_name, a.song_id, (
SELECT
IFNULL(MAX(DATE_FORMAT(show_date,'%m/%d/%y')), 'NEW SONG')
FROM tbl_shows AS c
WHERE a.show_date > c.show_date and a.song_id = c.song_id
) As PrevDate
FROM tbl_shows a, tbl_songs b
WHERE a.song_id = b.song_id
AND a.show_id = 899
这些表是:
CREATE TABLE tbl_songs
(`song_id` int, `song_name` varchar(11))
;
INSERT INTO tbl_songs
(`song_id`, `song_name`)
VALUES
(51, 'Song Name A'),
(368, 'Song Name B'),
(168, 'Song Name C'),
(568, 'Song Name D'),
(13, 'Song Name E')
;
CREATE TABLE tbl_shows
(`song_id` int, `song_order` int, `show_date` datetime, `show_id` int)
;
INSERT INTO tbl_shows
(`song_id`, `song_order`, `show_date`, `show_id`)
VALUES
(51, 1, '2013-07-19 00:00:00', 899),
(568, 2, '2013-07-19 00:00:00', 899),
(168, 3, '2013-07-19 00:00:00', 899),
(13, 4, '2013-07-19 00:00:00', 899),
(368, 1, '2013-07-06 00:00:00', 898),
(368, 1, '2013-07-03 00:00:00', 897),
(368, 1, '2013-05-27 00:00:00', 896),
(51, 1, '2013-04-10 00:00:00', 895),
(168, 1, '2013-04-10 00:00:00', 895),
(513, 1, '2013-03-12 00:00:00', 894),
(13, 1, '2013-03-03 00:00:00', 893);
为了让我的数据库更有效率,并且我不必一遍又一遍地重复日期,我将它分离到另一个名为 tbl_song_shows 的表中......就像这样。
CREATE TABLE tbl_songs
(`song_id` int, `song_name` varchar(11))
;
INSERT INTO tbl_songs
(`song_id`, `song_name`)
VALUES
(51, 'Song Name A'),
(368, 'Song Name B'),
(168, 'Song Name C'),
(568, 'Song Name D'),
(13, 'Song Name E')
;
CREATE TABLE tbl_shows
(`song_id` int, `song_order` int, `show_date` datetime, `show_id` int)
;
INSERT INTO tbl_shows
(`show_date`, `show_id`)
VALUES
( '2013-07-19 00:00:00', 899),
( '2013-07-19 00:00:00', 899),
( '2013-07-19 00:00:00', 899),
( '2013-07-19 00:00:00', 899),
( '2013-07-06 00:00:00', 898),
( '2013-07-03 00:00:00', 897),
( '2013-05-27 00:00:00', 896),
( '2013-04-10 00:00:00', 895),
( '2013-04-10 00:00:00', 895),
( '2013-03-12 00:00:00', 894),
( '2013-03-03 00:00:00', 893);
CREATE TABLE tbl_song_shows
(`song_id` int, `song_order` int, `show_id` int)
;
INSERT INTO tbl_song_shows
(`song_id`, `song_order`, `show_id`)
VALUES
(51, 1, 899),
(568, 2, 899),
(168, 3, 899),
(13, 4, 899),
(368, 1, 898),
(368, 1, 897),
(368, 1, 896),
(51, 1, 895),
(168, 1, 895),
(513, 1, 894),
(13, 1, 893);
我更改了代码以反映附加表,但它没有返回相同的查询数据。请参阅附加的两个 SQL Fiddle 链接以获取ORIGINAL和MODIFIED代码。我正在寻找 PrevDate 以返回播放特定歌曲的上一个日期。在新代码中,它返回 PrevDate 但不基于歌曲。任何能让我重回正轨的帮助将不胜感激。谢谢。如果事后有人能告诉我如何计算 Show_Date 和 PrevDate 之间的节目,那就太好了。谢谢!!!