2012-08-15 4 views
5

Recentemente ho creato una query che viene compilata correttamente e restituisce il risultato desiderato. Quando ho usato quel pezzo di codice come sottoquery in un altro pezzo di codice che un utente su StackOverflow ha inventato per me, ho riscontrato alcuni problemi, che alla fine sono stati risolti. Ho provato a usare questa query come sottoquery in quel pezzo di codice che mi è stato dato. Tuttavia, sql fiddle non restituisce nulla. Nessun errore o messaggio compilato. Quando ho provato a inserire un errore di sintassi di proposito, come un segno + casuale, non è successo nulla. è perché la query è troppo lunga?c'è un limite a ciò che può gestire sql fiddle? sql fiddle non compila nulla e non restituisce messaggi di errore

schema

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) 

interrogazione

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

L'aggiunta della query alla tua domanda può essere d'aiuto. L'esempio di SQLFiddle potrebbe aiutare ancora di più. Il problema –

+1

è che sql fiddle non viene compilato. quindi non ho un link alla query. ma posterò la query. è davvero lungo però – user1569897

+0

Forse dovresti includere anche la tabella di creazione + le istruzioni di inserimento. (Soprattutto perché il creatore di SQLFiddle, Jake Feasel, troverà probabilmente questa domanda.) A proposito, la tua query funziona sotto ad esempio phpMyAdmin? – biziclop

risposta

5

ho inserito la query in this violino, e ora vedo il problema. La tua query è lunga oltre 8000 caratteri (8423 per la precisione) e non visualizzerò quel messaggio sul pannello dei risultati. Fondamentalmente, questo è un bug di visualizzazione in SQL Fiddle che non ho notato prima (quindi, grazie per averlo portato alla mia attenzione!).

Nel frattempo, è possibile provare a ritagliare alcuni caratteri per adattarlo al limite di 8000 caratteri.

+1

È interessante notare che, se premo semplicemente "Formato SQL" con la query, riduce il numero di caratteri entro il limite 8000: http: // sqlfiddle. it/#! 2/97a57/1 –

+0

grazie. L'ho provato in phpmyadmin e funziona. – user1569897