years timestampdiff timediff month minutes hours mysql date count

timestampdiff - timediff mysql



MySQL Encuentra la fecha anterior en que se jugó una canción (0)

Estoy buscando alguna ayuda sobre por qué mi código aquí ya no funciona. Enlaces SQL Fiddle para el código ORIGINAL y MODIFICADO . Tenía mi base de datos en dos tablas diferentes y este código funcionaba bien.

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

Las tablas fueron:

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

Para que mi base de datos sea más eficiente y no tuve que repetir la fecha una y otra vez, la separé en otra tabla llamada tbl_song_shows ... así.

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

Cambié mi código para reflejar la tabla adicional pero no devuelve los mismos datos de consulta. Consulte los dos enlaces de SQL Fiddle adjuntos para el código ORIGINAL y MODIFICADO . Estoy buscando el PrevDate para devolver la fecha anterior en que se jugó una canción en particular. En el nuevo código, devuelve el PrevDate pero no se basa en la canción. Me agradecería cualquier ayuda para volver a encarrilarme. Gracias. Bonificación si después alguien podría decirme cómo contar los shows entre Show_Date y PrevDate. ¡¡¡Gracias!!!