Запросите наиболее быстро растущие теги в проводнике данных? - PullRequest
3 голосов
/ 15 февраля 2011

Я бы хотел сравнить популярность тегов за два месяца, упорядоченных по наибольшему изменению.

Я научился подсчитывать количество тегов в месяц, но не сравнивать их. Вот что у меня есть:

select TOP 10
    tags.tagname, count(*) AS tagcount
from Posts
    INNER JOIN PostTags ON PostTags.PostId = Posts.id
    INNER JOIN Tags     ON Tags.id         = PostTags.TagId
where
    datepart(year,  Posts.CreationDate) = 2011 and
    datepart(month, Posts.CreationDate) = 1
Group by tags.tagname
Order by tagcount DESC

http://data.stackexchange.com/stackoverflow/qe/924/query-count-tags-from-daterange
(примечание: вы можете клонировать, редактировать на месте и запускать )

Я новичок в SQL. Похоже, мне просто нужно создать второй запрос за предыдущий месяц (декабрь 2010 г.), а затем объединить эти два запроса со столбцом, равным prevMonth.count - nextMonth.count, и упорядочить по этому столбцу (получив только верхний X, поэтому он не навсегда).

Но я не могу понять, как объединить два запроса таким образом - я думаю, что вы должны иметь возможность их вкладывать, но я не могу заставить его работать. Другой способ - создать временную таблицу - мне она кажется неэффективной, но, может быть, это правильный путь?

Большое спасибо за любую помощь!


Кстати: что я хотел бы сделать дальше:

  1. После этого я хотел бы найти скорость роста (а не только абсолютное изменение чисел). Это просто (new-old)/old. Как скорость, но нормализовано.

  2. Затем теги, скорость роста которых увеличивается больше всего, то есть имеют экспоненциальный рост. Для этого потребуется 3 месяца: рассчитайте скорость изменения между 1 и 2 месяцами, а также между 2 и 3 месяцами. Разница между ними - это скорость изменения скорости изменения. Это как ускорение.

[Это сигнал для роста новых технологий, которые часто начинаются с малого при очень специфическом использовании. Люди в этой маленькой области разговаривают друг с другом, и хорошие идеи передаются в цепной реакции: один человек говорит двум, каждый говорит еще два, и так далее. Эта ниша может через некоторое время полностью преобразоваться, и, возможно, она распространится на другую, похожую нишу. См. «Видя, что дальше» , от парня Dilemma Innovator. ]


Вот более поздняя версия, использующая ответ JNK: http://data.stackexchange.com/stackoverflow/q/92869/query-tags-with-highest-increase-in-growth-over-3-months

И ... самый быстрорастущий тег - это ... facebook-c # -sdk . Не знаю, насколько это полезно, но это интересный способ просмотреть SO.

1 Ответ

3 голосов
/ 15 февраля 2011

Использовать таблицы #Temp:

-- QUERY: count tags from daterange
-- TODO: compare from two different dateranges...

select TOP 10
    tags.tagname, count(*) AS tagcount
INTO #TagCountTemp1
from Posts
    INNER JOIN PostTags ON PostTags.PostId = Posts.id
    INNER JOIN Tags     ON Tags.id         = PostTags.TagId 
where
    datepart(year,  Posts.CreationDate) = 2011 and
    datepart(month, Posts.CreationDate) = 1
Group by tags.tagname
Order by tagcount DESC

select TOP 10
    tags.tagname, count(*) AS tagcount
INTO #TagCountTemp2
from Posts
    INNER JOIN PostTags ON PostTags.PostId = Posts.id
    INNER JOIN Tags     ON Tags.id         = PostTags.TagId 
where
    datepart(year,  Posts.CreationDate) = 2010 and
    datepart(month, Posts.CreationDate) = 12
Group by tags.tagname
Order by tagcount DESC

SELECT TOP 10
t2.tagname, t2.tagcount as 'Month 1', t1.tagcount as 'Month 2', (t1.tagcount-t2.tagcount) as 'Increase'
FROM #TagCountTemp1 as t1
LEFT JOIN #TagCountTemp2 as t2
  ON T1.tagname = t2.tagname
ORDER BY (t1.tagcount-t2.tagcount) desc​​​​​​​​​​​​​​​

Это сработало для меня!

...