Использование аналитического подсчета (distinct) на Vertica не поддерживается

Имея тщательное исследование Google, кажется, что Vertica DB просто не поддерживает count (distinct ) over(), поскольку это вызывает:
«Ошибка 4249: разрешено использовать DISTINCT только MIN/MAX … Мин / макс позволены использовать определенное»

Я ищу легкую прогулку для этого.

Тем временем, я использую соединения или вложенные запросы.

Например:

    select campaign_id, segment_id, COUNT(DECODE(rank, 1, 1, NULL)) over()
    from (select campaign_id, segment_id, row_number() over(partition by segment_id) rank
          from cs)

Но мой запрос очень длинный, и мне нужно изобретать трюки по всему пути. Есть идеи для лучшего подхода?

Спасибо!

(Работает в HPE? Пожалуйста, реализуйте это, как вы сделали для всех общих аналитических функций!)

1 ответ

  1. Я должен был сделать что-то похожее вложенную структуру подсчета для подсчета различных значений кумулятивно, в диапазоне дат. Это свелось к аналогичному сбору row_number () = 1 строк, хотя я использовал case:

    COUNT(CASE WHEN rank = 1 THEN userID END) OVER (...)
    

    Смотреть на него было неприятно, но, к счастью, не слишком медленно.

    Мне нужно изобретать трюки по всему пути

    Да, я думаю, что это просто происходит, когда вы сталкиваетесь с отсутствующими функциями.