Son zamanlarda başarıyla derleyen ve istenen sonucu döndüren bir sorgu oluşturdum. Bu kod parçasını, yığın akışındaki bir kullanıcının bana geldiği başka bir kod parçasında bir alt sorgu olarak kullandığımda, sonuçta çözülen birkaç sorunla karşılaştım. Bu sorguyu bana verilen kod parçasında bir alt sorgu olarak kullanmaya çalıştım. Ancak, sql keman hiçbir şey döndürmez. Hata veya derlenmiş mesaj yok. Rastgele bir + işaret gibi bir sözdizimi hatası koymaya çalıştığımda hiçbir şey olmadı. sorgu çok uzun olduğu için mi?sql kemanın işleyebileceği bir sınır var mı? sql fiddle hiçbir şey derlemez ve hata iletileri döndürmez
şema
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)
sorgu
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
Sorunuza sorgunun eklenmesi yardımcı olabilir. SQLFiddle örneği daha fazla yardımcı olabilir. –
sorun sql keman derleme değil. bu yüzden sorguya bir link alamıyorum. ama sorguyu göndereceğim. onun gerçekten uzun olmasına rağmen – user1569897
Belki de oluşturma tablosu + ekleme ifadelerini de içermelisiniz. (Özellikle SQLFiddle yaratıcısı Jake Feasel'in muhtemelen bu soruyu bulacağı için.) BTW, sorgunuz örneğin phpMyAdmin altında çalışıyor mu? – biziclop