이것은 토픽 대시보드 보고서의 SQL 버전입니다.
이 보고서는 지정된 날짜 범위 내에서 매일 생성된 새로운 토픽 수를 제공합니다. 이 보고서는 개인 메시지는 포함하지 않으며, 포럼에서 표시되는 일반 토픽만 포함합니다.
--[params]
-- date :start_date
-- date :end_date
SELECT
p.created_at::date as day,
COUNT(p.id) AS topics_created
FROM posts p
INNER JOIN topics t ON t.id = p.topic_id AND t.deleted_at ISNULL
WHERE p.created_at::date BETWEEN :start_date AND :end_date
AND p.post_number = 1
AND p.user_id > 0
AND p.deleted_at ISNULL
AND t.archetype = 'regular'
GROUP BY p.created_at::date
ORDER BY p.created_at::date ASC
SQL 쿼리 설명
해당 SQL 쿼리는 다음과 같은 작업을 수행합니다:
- 파라미터 정의:
:start_date와:end_date라는 두 개의 파라미터를 받아 보고서의 날짜 범위를 정의합니다. 두 날짜 파라미터 모두YYYY-MM-DD형식을 사용합니다. - 데이터 선택: 쿼리는 게시물의 생성 날짜(
p.created_at)와 게시물 ID의 개수(COUNT(p.id))를topics_created로 선택합니다. - 조인(Joins):
posts테이블을topics테이블과 각자의id필드를 기준으로 조인하며, 삭제되지 않은 토픽(t.deleted_at ISNULL)만 고려되도록 합니다. - 필터링: 쿼리는 다음 조건을 만족하는 게시물만 포함하도록 필터링합니다:
- 지정된 날짜 범위 내에서 생성된 게시물(
p.created_at::date BETWEEN :start_date AND :end_date). - 토픽의 첫 번째 게시물(
p.post_number = 1)로, 이는 새로운 토픽의 시작을 나타냅니다. - 등록된 사용자에 의해 생성된 게시물(
p.user_id > 0)로, 시스템 게시물을 제외합니다. - 삭제되지 않은 게시물(
p.deleted_at ISNULL). - ‘regular’ 아키타입의 토픽에 속하는 게시물(
t.archetype = 'regular')로, 개인 메시지를 제외합니다.
- 지정된 날짜 범위 내에서 생성된 게시물(
- 그룹핑: 결과는 게시물의 생성 날짜(
p.created_at::date) 기준으로 그룹화됩니다. - 정렬: 최종 출력은 생성 날짜 오름차순으로 정렬(
ORDER BY p.created_at::date ASC)되어, 새로운 토픽 생성의 시간적 흐름을 보여줍니다.
결과 예시
| day | topics_created |
|---|---|
| 2023-11-11 | 18 |
| 2023-11-12 | 10 |
| 2023-11-13 | 21 |
| 2023-11-14 | 19 |
| 2023-11-15 | 22 |
| … | … |