2011-02-15 2 views
2

두 달 사이에 태그의 인기를 비교하고 싶습니다. 가장 큰 변화가 있습니다.데이터 탐색기에서 가장 빠르게 증가하는 태그를 쿼리 하시겠습니까?

나는 한 달 동안 태그 수를 계산하는 방법을 알아 냈지만, 태그를 비교하는 방법은 계산하지 못했습니다. 여기에 지금까지이 작업은 다음과 같습니다

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 년 12 월)에 대한 두 번째 쿼리를 작성한 다음이 두 쿼리를 결합하여 prevMonth.count - nextMonth.count 인 열로 정렬 한 다음 해당 열에 따라 정렬해야합니다 (상위 X 만 얻음). 영원히 가져 가라.)

하지만이 방법으로 두 개의 쿼리를 결합하는 방법을 생각해 낼 수는 없습니다. 그러나이 쿼리를 중첩 할 수 있어야한다고 생각합니다. 그러나 작동시키지 못할 수도 있습니다. 또 다른 방법은 임시 테이블을 만드는 것입니다. 이것은 나에게 비효율적 인 것처럼 보이지만 어쩌면 올바른 방법일까요?

많은 도움을 주셔서 감사합니다. BTW


: 나는 다음에 무엇을하고 싶은 것 :이 후

  1. , 나는 성장 속도 (숫자의 절대 변화가 아닌)를 찾을 싶습니다. 그건 단지 (new-old)/old입니다. 속도와 비슷하지만 정상화되었습니다.

  2. 그런 다음 성장 속도가 가장 증가하는 태그 즉 지수 증가가있는 태그입니다. 이것은 3 개월이 필요합니다 : 1 ~ 2 개월, 2 ~ 3 개월 사이의 변화율을 계산하십시오. 이들의 차이는 변화율의 변화율입니다. 그것은 가속과 같습니다.

[이것은 매우 특정한 사용법에서 종종 시작하는 새로운 기술 성장의 신호입니다. 그 좁은 지역의 사람들은 서로 이야기하고 좋은 아이디어는 연쇄 반응을 통해 전달됩니다. 한 사람이 두 사람에게 말하면, 두 사람은 두 사람을 더 말합니다. 그 틈새 시장은 잠시 후 완전히 전환 될 수 있으며, 비슷한 벽감으로 확산 될 수도 있습니다. "다음 내용보기", Innovator 's Dilemma 녀석을 참조하십시오. http://data.stackexchange.com/stackoverflow/q/92869/query-tags-with-highest-increase-in-growth-over-3-months

그리고 ... 가장 빠르게 성장하는 태그입니다 ... facebook-c#-sdk :]


여기 JNK의 답변을 사용하여 최신 버전입니다. Dunno는 이것이 얼마나 유용한 지 알 수 있지만 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​​​​​​​​​​​​​​​ 

이 나를 위해 잘 작동!

+0

감사합니다. 나는 1과 2를 바꿔 치기했다. (네가 컬럼 네이밍에서 이것을 한 것을 볼 수있다.) 처음 두 개의 select 등에서 TOP 10을 제거하고 3 달 동안 추가했다 : http://data.stackexchange.com/stackoverflow/q/92869/query-tags-3 개월 이상 성장률이 가장 높은 – 13ren