3

2か月間のタグの人気を、最大の変化順に比較したいと思います。

1か月のタグの数を数える方法はわかりましたが、比較する方法はわかりませんでした。これが私がこれまでに持っているものです:

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

https://data.stackexchange.com/stackoverflow/qe/924/query-count-tags-from-daterange
(注:クローンを作成し、その場で編集して、実行することができます

SQLは初めてです。前月(2010年12月)の2番目のクエリを作成し、これら2つのクエリを列と組み合わせて、prevMonth.count - nextMonth.countその列で並べ替える必要があるようです(上位のXだけを取得するため、時間がかかりません)。永遠に)。

しかし、この方法で2つのクエリを組み合わせる方法を理解することはできません。ネストできるはずだと思いますが、機能させることはできません。別の方法は、一時テーブルを作成することです-それは私には非効率に思えますが、おそらくそれは正しい方法ですか?

助けてくれてありがとう!


ところで:次にやりたいこと:

  1. この後、(数の絶対的な変化だけでなく)成長率を見つけたいと思います。それはただ(new-old)/oldです。速度と似ていますが、正規化されています。

  2. 次に、成長率が最も増加しているタグ、つまり指数関数的に成長しているタグ。これには3か月かかります。1か月から2か月の間、および2か月から3か月の間の変化率を計算します。これらの違いは、変化率の変化率です。それは加速のようなものです。

[これは、新しいテクノロジーが成長していることを示すものであり、非常に特殊な使用法では小さなものから始まることがよくあります。その小さなエリアの人々はお互いに話し合い、良いアイデアは連鎖反応で伝えられます。1人が2人に話し、それぞれがさらに2人に話します。そのニッチはしばらくすると完全に変換される可能性があり、おそらくそれは別の同様のニッチに広がる可能性があります。イノベーターのジレンマの男による「SeeingWhat'sNext」を参照してください。]


JNKの回答を使用した後のバージョンは次のとおりです: https ://data.stackexchange.com/stackoverflow/q/92869/query-tags-with-highest-increase-in-growth-over-3-months

そして...最も急速に成長しているタグは... facebook-c#-sdkです。Dunnoはこれがどれほど便利かを示していますが、SOを閲覧するための興味深い方法です。

4

1 に答える 1

3

#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​​​​​​​​​​​​​​​

これは私にとってはうまくいきました!

于 2011-02-15T14:11:21.377 に答える