# 게시물 생성 x일 전에 생성된 계정의 좋아요 필터링

**URL:** https://meta.discourse.org/t/filter-users-likes-out-if-account-created-x-days-prior-to-topic-creation/232331
**Category:** Data & reporting
**Tags:** sql-query
**Created:** [7월 8, 2022, 6:02오후 UTC](https://meta.discourse.org/t/filter-users-likes-out-if-account-created-x-days-prior-to-topic-creation/232331 "2022-07-08T18:02:07Z")
**Posts on this page:** 11
**Page:** 1

<div class="post-metadata">

### Author: ![Matt0x01](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/matt0x01/32/264811_2.png) [@Matt0x01](https://meta.discourse.org/u/Matt0x01)
#### Post date: [7월 8, 2022, 6:02오후 UTC](https://meta.discourse.org/t/filter-users-likes-out-if-account-created-x-days-prior-to-topic-creation/232331/1 "2022-07-08T18:02:07Z")

</div>

안녕하세요,

특정 주제가 생성된 지 2일 이내의 사용자는 제외되도록 필터를 하나 더 추가하려고 합니다.

아래와 같이 시도해 보았어요. SQL은 아직 초보 단계라 어떻게 진행해야 할지 잘 모르겠습니다. 도움 주실 수 있나요?

```plaintext
SELECT *
FROM topic t post_actions pa INNER JOIN users u ON u.id = pa.user_id
WHERE post_id = 1 
    AND post_action_type_id = 2
    AND u.created_at < t.created_at-2

```

---

<div class="post-metadata">

### Author: ![JammyDodger](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/jammydodger/32/254611_2.png) [@JammyDodger](https://meta.discourse.org/u/JammyDodger)
#### Post date: [7월 10, 2022, 1:31오후 UTC](https://meta.discourse.org/t/filter-users-likes-out-if-account-created-x-days-prior-to-topic-creation/232331/2 "2022-07-10T13:31:50Z")

</div>

이 부분에 대해 무엇을 원하시는지 잘 모르겠어요. 달성하려는 목표에 대해 조금 더 자세히 설명해 주실 수 있을까요?

---

<div class="post-metadata">

### Author: ![Matt0x01](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/matt0x01/32/264811_2.png) [@Matt0x01](https://meta.discourse.org/u/Matt0x01)
#### Post date: [7월 11, 2022, 1:24오후 UTC](https://meta.discourse.org/t/filter-users-likes-out-if-account-created-x-days-prior-to-topic-creation/232331/3 "2022-07-11T13:24:03Z")

</div>

특정 주제가 생성된 지 2일 미만으로 가입된 사용자를 제외하기 위해 날짜 필터를 수정하려고 합니다. datediff나 INTERVAL을 사용하라는 조언을 받았지만, 둘 다 작동하지 않고 있습니다.

또한, 주제 t를 다른 내부 조인(inner join)으로 추가하는 데 도움이 필요했는데, 다음과 같이 해결했습니다:  
`FROM post_actions pa INNER JOIN users u ON u.id = pa.user_id INNER JOIN topics t on t.id = t.id`  
t.id가 미리보기 대신 숫자로 표시되는데, 이 부분도 해결할 방법이 있을까요?

---

<div class="post-metadata">

### Author: ![JammyDodger](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/jammydodger/32/254611_2.png) [@JammyDodger](https://meta.discourse.org/u/JammyDodger)
#### Post date: [7월 11, 2022, 1:37오후 UTC](https://meta.discourse.org/t/filter-users-likes-out-if-account-created-x-days-prior-to-topic-creation/232331/4 "2022-07-11T13:37:46Z")

</div>

> [@Matt0x01](#):
>
> t.id가 미리보기 대신 숫자로 표시됩니다. 이것도 처리할 방법이 있을까요?

이 경우에는 `t.id AS topic_id`로 별명을 지정하면 됩니다. 그러면 자동으로 잘 동작할 것입니다. 👍

이 주제에서 사용할 수 있는 Explorer의 마법 같은 기능에 대한 몇 가지 추가 예시도 있습니다 - [IDs in Data Explorer - #3 by tshenry](https://meta.discourse.org/t/ids-in-data-explorer/224775/3)

'특정 주제’라고 하셨을 때, 매번 동일한 주제(즉, 정적인 주제 ID)를 의미하는 건가요?

---

<div class="post-metadata">

### Author: ![Matt0x01](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/matt0x01/32/264811_2.png) [@Matt0x01](https://meta.discourse.org/u/Matt0x01)
#### Post date: [7월 11, 2022, 2:55오후 UTC](https://meta.discourse.org/t/filter-users-likes-out-if-account-created-x-days-prior-to-topic-creation/232331/5 "2022-07-11T14:55:35Z")

</div>

역시 매번 같은 주제네요.

이 방법으로 작동하는 것 같습니다. 이 쿼리로 1000개 이상의 결과가 나와서 다음을 추가해 봤습니다.  
`AND t.id = post.topic_id`

이렇게 하면 목록이 16개 결과로 줄었지만, 여전히 동일한 항목이 4개 있었습니다. 어떻게 수정해야 할지 모르겠네요.

```plaintext
SELECT
    t.id as topic_id,
    pa.post_id,
    pa.user_id,
    pa.created_at,
    u.created_at
FROM post_actions pa INNER JOIN users u ON u.id = pa.user_id INNER JOIN topics t on t.id = t.id INNER JOIN posts p on p.topic_id = p.topic_id
WHERE post_id = 15000
    AND t.id = 7000
    AND post_action_type_id = 2
    AND u.created_at < t.created_at - INTERVAL '2 DAY'

```

수정:  
`INNER JOIN posts p on p.topic_id = p.topic_id`  
를  
`INNER JOIN posts p on p.topic_id = t.id`  
으로 변경했는데, 이전처럼 16개 결과로 줄었습니다.

이제 여전히 16개가 나오는 이유는 t.id = t.id 때문이라고 생각합니다. 그런데 이걸 어떻게 바꿔야 할지 모르겠네요

---

<div class="post-metadata">

### Author: ![JammyDodger](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/jammydodger/32/254611_2.png) [@JammyDodger](https://meta.discourse.org/u/JammyDodger)
#### Post date: [7월 11, 2022, 4:29오후 UTC](https://meta.discourse.org/t/filter-users-likes-out-if-account-created-x-days-prior-to-topic-creation/232331/6 "2022-07-11T16:29:30Z")

</div>

다만 이 방법에는 몇 가지 문제가 있습니다. 다만 SQL에 능숙하지 않아서 모든 부분을 자세히 설명하기는 어렵습니다. 🙂

이미 `post_id`를 가지고 있다면 `topic_id`는 필요하지 않을 것입니다. `post_id`는 해당 게시물(및 토픽)에 고유하기 때문입니다. 또한 일부 추가 테이블을 두 번째 테이블에 없는 필드로 조인하려는 것 같습니다(예: `t.id` = `t.id`는 topics 테이블 내에서 정확히 동일한 필드입니다). 그리고 쿼리하는 토픽이 정적(static)이라면, 항상 동일한 날짜(예: 게시물 15000이 생성된 지 2일 전)가 되므로 상대적인 INTERVAL 대신 명시적인 날짜로 설정할 수 있습니다.

아직 제 버전을 직접 테스트해 보지는 못했지만, SQL/배지 관련 기술의 대부분은 Meta에서 다양한 예시를 검색하고 그 조각들을 모으는 과정에서 배웠습니다. 🙂 많은 예시가 #data-explorer 태그 아래에 있으며, [Some common badge queries idea](https://meta.discourse.org/t/some-common-badge-queries-idea/31859)에는 다양한 용도의 예시가 많이 있으니 참고해 보시는 것도 좋을 것 같습니다.

---

<div class="post-metadata">

### Author: ![Matt0x01](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/matt0x01/32/264811_2.png) [@Matt0x01](https://meta.discourse.org/u/Matt0x01)
#### Post date: [7월 11, 2022, 5:06오후 UTC](https://meta.discourse.org/t/filter-users-likes-out-if-account-created-x-days-prior-to-topic-creation/232331/7 "2022-07-11T17:06:30Z")

</div>

> [@JammyDodger](#):
>
> 이미 `post_id`를 가지고 있다면, 게시글 ID는 해당 게시글(및 주제)에 고유하므로 `topic_id`는 필요하지 않을 것 같습니다.

네, 알아요. 그런데 주제 ID를 위한 AND 조건을 제거하면 어떤 이유로든 결과가 다시 1000개로 올라가요. 보내주신 링크를 확인해 볼게요. 거기에 문제를 해결할 수 있는 방법이 있기를 바라요.

---

<div class="post-metadata">

### Author: ![JammyDodger](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/jammydodger/32/254611_2.png) [@JammyDodger](https://meta.discourse.org/u/JammyDodger)
#### Post date: [7월 12, 2022, 9:04오후 UTC](https://meta.discourse.org/t/filter-users-likes-out-if-account-created-x-days-prior-to-topic-creation/232331/8 "2022-07-12T21:04:05Z")

</div>

여기서 무엇을 원하시는지 아직 정확히 이해하지 못했지만, post\_id와 새 사용자를 포함할 시작 날짜를 알고 있다면 이렇게 해보는 건 어떨까요?

```plaintext
-- [params]
-- int :post_id
-- date :date

SELECT pa.user_id,
       pa.created_at AS reltime$time
FROM post_actions pa 
JOIN users u ON u.id = pa.user_id
WHERE pa.post_id = :post_id
AND post_action_type_id = 2
AND u.created_at::date > :date
ORDER BY pa.created_at DESC

```

이 쿼리는 특정 게시글을 '좋아요’한 사용자 목록을 반환하며, 입력한 날짜 이후에 계정을 생성한 사용자들만 포함됩니다(좋아요를 누른 시간순 정렬).

---

<div class="post-metadata">

### Author: ![Matt0x01](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/matt0x01/32/264811_2.png) [@Matt0x01](https://meta.discourse.org/u/Matt0x01)
#### Post date: [7월 14, 2022, 6:44오후 UTC](https://meta.discourse.org/t/filter-users-likes-out-if-account-created-x-days-prior-to-topic-creation/232331/9 "2022-07-14T18:44:44Z")

</div>

모든 것이 정상적으로 작동하도록 설정했고, reltime에 대해 전혀 몰랐는데 이제 그걸 구현했습니다. 도움을 주셔서 다시 한번 감사드립니다!

마지막으로 reltime에 대해 한 가지 질문이 있습니다. 이름을 "time"에서 "주제 생성"으로 변경할 수 있는 방법이 있나요?

---

<div class="post-metadata">

### Author: ![JammyDodger](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/jammydodger/32/254611_2.png) [@JammyDodger](https://meta.discourse.org/u/JammyDodger)
#### Post date: [7월 22, 2022, 1:48오후 UTC](https://meta.discourse.org/t/filter-users-likes-out-if-account-created-x-days-prior-to-topic-creation/232331/10 "2022-07-22T13:48:43Z")

</div>

그렇습니다. 🙂 `reltime$topic_created`로 변경하면 해결될 겁니다. 👍

---

<div class="post-metadata">

### Author: ![system](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/system/32/443519_2.png) [@system](https://meta.discourse.org/u/system)
#### Post date: [11월 9, 2022, 12:16오후 UTC](https://meta.discourse.org/t/filter-users-likes-out-if-account-created-x-days-prior-to-topic-creation/232331/11 "2022-11-09T12:16:24Z")

</div>

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.
