timediff - mysql if row count



MySQL 노래가 재생 된 이전 날짜 찾기 (0)

여기 왜 내 코드가 더 이상 작동하지 않는지에 대한 도움을 찾고있다. SQL Fiddle은 ORIGINALMODIFIED 코드를 링크합니다. 나는 두 개의 다른 테이블에 내 데이터베이스가 있었고이 코드는 정상적으로 작동했습니다.

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);

추가 테이블을 반영하도록 코드를 변경했지만 동일한 쿼리 데이터를 반환하지 않습니다. ORIGINALMODIFIED 코드에 대한 두 개의 SQL Piddle 링크를 참조하십시오. 특정 노래가 연주 된 이전 날짜를 반환하기 위해 PrevDate를 찾고 있습니다. 새 코드에서는 PrevDate를 반환하지만 노래를 기반으로하지는 않습니다. 다시 궤도에 오르면 도움이 될 것입니다. 감사. 보너스는 나중에 Show_Date와 PrevDate 사이의 쇼를 계산하는 방법을 누군가에게 알려줄 수 있습니다. 감사!!!





count