SQL захватывает уникальные значения для каждой категории - PullRequest
0 голосов
/ 08 октября 2019

Я довольно плохо знаком с SQL и Redshift, но у меня возникает странная проблема. Так что мои данные выглядят так, как показано ниже. Игнорировать id, фактические значения date_time ... Я просто поместил случайную информацию, но в том же формате

id date_time(var char 255) 1 2019-01-11T05:01:59 1 2019-01-11T05:01:59 2 2019-01-11T05:01:59 3 2019-01-11T05:01:59 1 2019-02-11T05:01:59 2 2019-02-11T05:01:59 Я пытаюсь получить количество уникальных идентификаторов в месяц. Я попробовал следующую команду ниже. Учитывая объем данных, я просто попытался сделать демонстрацию первых 10 строк моей таблицы ...

SELECT COUNT(DISTINCT id),
       LEFT(date_time,7)
FROM    ( SELECT top 10* 
         FROM myTable.ME )
GROUP BY LEFT(date_time, 7), id

Я ожидаю что-то вроде ниже.

count left 3 2019-01 2 2019-02 Но яВместо этого я становлюсь похожим на то, что ниже

enter image description here

Затем я попробовал приведенную ниже команду, которая кажется правильной.

SELECT COUNT(DISTINCT id),
       LEFT(date_time,7)
FROM    ( SELECT top 1000000*
          FROM myTable.ME )
GROUP BY LEFT(date_time, 7)

Однако, если вы удалите часть DISTINCT, вы получите результаты ниже. Кажется, что он смотрит только на определенный месяц (2019-01), а не на другие месяцы. enter image description here

Если кто-нибудь может сказать мне, что не так с командами, которые я использую, или может дать мне правильную команду, я буду очень благодарен. Спасибо. РЕДАКТИРОВАТЬ: Может быть, это потому, что, возможно, мои данные не чистые?

1 Ответ

1 голос
/ 08 октября 2019

Почему вы используете строку для даты? Это просто неправильно. Есть встроенные типы. Но если у вас есть какая-то причина или вы не можете ее изменить, используйте строковые функции:

select left(date_time, 7) as yyyymm,
       count(distinct id)
from t
group by yyyymm
order by yyyymm;

В первом запросе у вас есть id в group by, который не выполняет то, что вы хотите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...