2012-08-15 6 views
5

Hace poco creé una consulta que compila correctamente y devuelve el resultado deseado. Cuando utilicé ese fragmento de código como una subconsulta en otro fragmento de código que me surgió a un usuario en stackoverflow, me encontré con algunos problemas que finalmente se resolvieron. Intenté usar esta consulta como una subconsulta en esa pieza de código que me dieron. Sin embargo, sql fiddle no devuelve nada. Sin errores o mensajes compilados. Cuando intenté poner un error de sintaxis a propósito, como un signo aleatorio +, no pasó nada. ¿es porque la consulta es demasiado larga?¿hay un límite para lo que puede manejar el violín sql? sql fiddle no compila nada y no devuelve ningún mensaje de error

esquema

CREATE TABLE sampleData 
    (
    id MEDIUMINT NOT NULL AUTO_INCREMENT, 
     timecode int, 
    count int, 
     PRIMARY KEY (id) 
    ) 
#ENGINE=MyISAM 
; 

INSERT INTO sampleData 
(timecode, count) 
VALUES 
(1344893440, 1), (1346014720, 1),(1344898688,1),(1345654784,1),(1345978368,1), 
(1345959296,1), (1345064704,1), (1345156352,1),(1345225600,1), 
(1345017984,1),(1345640960,1),(1346019968,1),(1345834752,1), 
(1345438464,1),(1344986880,1),(1345045632,1),(1345557888,1),(1344973056,1),(1345087232,1),(1345433216,1),(1345691008,1), 
(1344917760,1),(1345253248,1),(1344934912,1),(1345890048,1),(1345272448,1), (1345829504,1),(1345798400,1),(1345203200,1),(1344741120,1), 
(1345175552,1),(1344824192,1),(1344926336,1),(1345571712,1),(1344931584,1),(1345211776,1),(1345059456,1),(1345516288,1),(1345441920,1),(1346009472,1) 

consulta

select t_0.*, 
      (coalesce(t_3.average_number_of_votes_per_previous_period_days, 0) - coalesce(t_4.average_number_of_votes_per_previous_period_days, 0)) * 100.0 
    from 
     (select t.*, 
      (coalesce(t_1.count, 0) - coalesce(t_2.count, 0)) * 100.0 as "percentage increase in count in %" 
    from 
    (
     SELECT sum(1) AS ordr, 
     t1.id,t1.day, t1.count, SUM(t2.count) as aggregate, (SUM(t2.count)-t1.count)/(sum(1)-1) as "average_number_of_votes_per_previous_period_days" 

     FROM 
     (SELECT id, date(FROM_UNIXTIME(timecode)) AS day,(FROM_UNIXTIME(timecode)) AS original, COUNT(1) as 'count' 
     FROM sampleData 
     GROUP BY DAY) t1 
     INNER JOIN 
     (SELECT date(FROM_UNIXTIME(timecode)) AS day,(FROM_UNIXTIME(timecode)) AS original, COUNT(1) as 'count' 
     FROM sampleData 
     GROUP BY DAY) t2 
     on t1.day >= t2.day                                 
     GROUP BY t1.day, t1.count 
     ORDER BY t1.day 
     )t 
     left outer join 
     (
      SELECT sum(1) AS ordr, 
      t1.id,t1.day, t1.count, SUM(t2.count) as aggregate, (SUM(t2.count)-t1.count)/(sum(1)-1) as "average_number_of_votes_per_previous_period_days" 
      FROM 
      (SELECT id, date(FROM_UNIXTIME(timecode)) AS day,(FROM_UNIXTIME(timecode)) AS original, COUNT(1) as 'count' 
      FROM sampleData 
      GROUP BY DAY) t1 
      INNER JOIN 
      (SELECT date(FROM_UNIXTIME(timecode)) AS day,(FROM_UNIXTIME(timecode)) AS original, COUNT(1) as 'count' 
      FROM sampleData 
      GROUP BY DAY) t2 
      on t1.day >= t2.day                                 
      GROUP BY t1.day, t1.count 
      ORDER BY t1.day 
     )t_1 
     on t.ordr = t_1.ordr + 1 left outer join 
     (
      SELECT sum(1) AS ordr, 
      t1.id,t1.day, t1.count, SUM(t2.count) as aggregate, (SUM(t2.count)-t1.count)/(sum(1)-1) as "average_number_of_votes_per_previous_period_days" 
      FROM 
       (SELECT id, date(FROM_UNIXTIME(timecode)) AS day,(FROM_UNIXTIME(timecode)) AS original, COUNT(1) as 'count' 
       FROM sampleData 
       GROUP BY DAY) t1 
      INNER JOIN 
       (SELECT date(FROM_UNIXTIME(timecode)) AS day,(FROM_UNIXTIME(timecode)) AS original, COUNT(1) as 'count' 
       FROM sampleData 
       GROUP BY DAY) t2 
      on t1.day >= t2.day                                 
      GROUP BY t1.day, t1.count 
      ORDER BY t1.day 
      ) t_2 
     on t.ordr = t_2.ordr + 2)t_0 
    left outer join 
     (select t.*, 
      (coalesce(t_1.count, 0) - coalesce(t_2.count, 0)) * 100.0 as "percentage increase in count in %" 
    from 
    (
     SELECT sum(1) AS ordr, 
     t1.id,t1.day, t1.count, SUM(t2.count) as aggregate, (SUM(t2.count)-t1.count)/(sum(1)-1) as "average_number_of_votes_per_previous_period_days" 

     FROM 
     (SELECT id, date(FROM_UNIXTIME(timecode)) AS day,(FROM_UNIXTIME(timecode)) AS original, COUNT(1) as 'count' 
     FROM sampleData 
     GROUP BY DAY) t1 
     INNER JOIN 
     (SELECT date(FROM_UNIXTIME(timecode)) AS day,(FROM_UNIXTIME(timecode)) AS original, COUNT(1) as 'count' 
     FROM sampleData 
     GROUP BY DAY) t2 
     on t1.day >= t2.day                                 
     GROUP BY t1.day, t1.count 
     ORDER BY t1.day 
     )t 
     left outer join 
     (
      SELECT sum(1) AS ordr, 
      t1.id,t1.day, t1.count, SUM(t2.count) as aggregate, (SUM(t2.count)-t1.count)/(sum(1)-1) as "average_number_of_votes_per_previous_period_days" 
      FROM 
      (SELECT id, date(FROM_UNIXTIME(timecode)) AS day,(FROM_UNIXTIME(timecode)) AS original, COUNT(1) as 'count' 
      FROM sampleData 
      GROUP BY DAY) t1 
      INNER JOIN 
      (SELECT date(FROM_UNIXTIME(timecode)) AS day,(FROM_UNIXTIME(timecode)) AS original, COUNT(1) as 'count' 
      FROM sampleData 
      GROUP BY DAY) t2 
      on t1.day >= t2.day                                 
      GROUP BY t1.day, t1.count 
      ORDER BY t1.day 
     )t_1 
     on t.ordr = t_1.ordr + 1 left outer join 
     (
      SELECT sum(1) AS ordr, 
      t1.id,t1.day, t1.count, SUM(t2.count) as aggregate, (SUM(t2.count)-t1.count)/(sum(1)-1) as "average_number_of_votes_per_previous_period_days" 
      FROM 
       (SELECT id, date(FROM_UNIXTIME(timecode)) AS day,(FROM_UNIXTIME(timecode)) AS original, COUNT(1) as 'count' 
       FROM sampleData 
       GROUP BY DAY) t1 
      INNER JOIN 
       (SELECT date(FROM_UNIXTIME(timecode)) AS day,(FROM_UNIXTIME(timecode)) AS original, COUNT(1) as 'count' 
       FROM sampleData 
       GROUP BY DAY) t2 
      on t1.day >= t2.day                                 
      GROUP BY t1.day, t1.count 
      ORDER BY t1.day 
      ) t_2 
     on t.ordr = t_2.ordr + 2) t_3 
     on t.ordr = t_3.ordr + 1 
    left outer join 
     (select t.*, 
      (coalesce(t_1.count, 0) - coalesce(t_2.count, 0)) * 100.0 as "percentage increase in count in %" 
    from 
    (
     SELECT sum(1) AS ordr, 
     t1.id,t1.day, t1.count, SUM(t2.count) as aggregate, (SUM(t2.count)-t1.count)/(sum(1)-1) as "average_number_of_votes_per_previous_period_days" 

     FROM 
     (SELECT id, date(FROM_UNIXTIME(timecode)) AS day,(FROM_UNIXTIME(timecode)) AS original, COUNT(1) as 'count' 
     FROM sampleData 
     GROUP BY DAY) t1 
     INNER JOIN 
     (SELECT date(FROM_UNIXTIME(timecode)) AS day,(FROM_UNIXTIME(timecode)) AS original, COUNT(1) as 'count' 
     FROM sampleData 
     GROUP BY DAY) t2 
     on t1.day >= t2.day                                 
     GROUP BY t1.day, t1.count 
     ORDER BY t1.day 
     )t 
     left outer join 
     (
      SELECT sum(1) AS ordr, 
      t1.id,t1.day, t1.count, SUM(t2.count) as aggregate, (SUM(t2.count)-t1.count)/(sum(1)-1) as "average_number_of_votes_per_previous_period_days" 
      FROM 
      (SELECT id, date(FROM_UNIXTIME(timecode)) AS day,(FROM_UNIXTIME(timecode)) AS original, COUNT(1) as 'count' 
      FROM sampleData 
      GROUP BY DAY) t1 
      INNER JOIN 
      (SELECT date(FROM_UNIXTIME(timecode)) AS day,(FROM_UNIXTIME(timecode)) AS original, COUNT(1) as 'count' 
      FROM sampleData 
      GROUP BY DAY) t2 
      on t1.day >= t2.day                                 
      GROUP BY t1.day, t1.count 
      ORDER BY t1.day 
     )t_1 
     on t.ordr = t_1.ordr + 1 left outer join 
     (
      SELECT sum(1) AS ordr, 
      t1.id,t1.day, t1.count, SUM(t2.count) as aggregate, (SUM(t2.count)-t1.count)/(sum(1)-1) as "average_number_of_votes_per_previous_period_days" 
      FROM 
       (SELECT id, date(FROM_UNIXTIME(timecode)) AS day,(FROM_UNIXTIME(timecode)) AS original, COUNT(1) as 'count' 
       FROM sampleData 
       GROUP BY DAY) t1 
      INNER JOIN 
       (SELECT date(FROM_UNIXTIME(timecode)) AS day,(FROM_UNIXTIME(timecode)) AS original, COUNT(1) as 'count' 
       FROM sampleData 
       GROUP BY DAY) t2 
      on t1.day >= t2.day                                 
      GROUP BY t1.day, t1.count 
      ORDER BY t1.day 
      ) t_2 
     on t.ordr = t_2.ordr + 2) t_4 
     on t_0.ordr = t_4.ordr + 2 
+1

Añadir la consulta a su pregunta podría ayudar. El ejemplo SQLFiddle podría ayudar aún más. –

+1

problema es que el violín sql no compila. así que no obtengo un enlace a la consulta. pero publicaré la consulta. es realmente largo aunque – user1569897

+0

Tal vez también debería incluir las sentencias create table + insert también. (Especialmente porque el creador de SQLFiddle Jake Feasel probablemente encontrará esta pregunta.) Por cierto, ¿su consulta funciona en, por ejemplo, phpMyAdmin? – biziclop

Respuesta

5

He enchufado su consulta en this violín, y ahora veo el problema. Su consulta tiene más de 8000 caracteres (8423 para ser exactos) y no mostraré ese mensaje en el panel de resultados. Básicamente, este es un error de visualización en SQL Fiddle que no había notado antes (¡así que gracias por llamar mi atención!).

Mientras tanto, podría intentar recortar algunos de los caracteres para que quepan dentro del límite de 8000 caracteres.

+1

Curiosamente, si pulso "Formatear SQL" con su consulta, reduce el número de caracteres dentro del límite de 8000: http: // sqlfiddle. com/#! 2/97a57/1 –

+0

gracias. Lo intenté en phpmyadmin y funciona. – user1569897

Cuestiones relacionadas