Запросите наиболее быстро растущие теги в проводнике данных?

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

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

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/stackru/qe/924/query-count-tags-from-daterange
(примечание: вы можете клонировать, редактировать на месте и запустить его)

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

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

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


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

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

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

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


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

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

1 ответ

Решение

Используйте таблицы #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​​​​​​​​​​​​​​​

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

Другие вопросы по тегам