Filtering Records Based on Aggregate Criteria

I've been trying to do the following but can't figure out the best way to do it. I have a table that looks basically like this:

user_id|ticket_id|inquiry_type

I want to filter out rows for a specific user_id when ALL of the rows for that user_id have a value of "false_inquiry" in the inquiry_type field.

But if the user has even one row where inquiry_type is a different value or NULL, we keep it in the data set.

I was trying to figure out if this is something I need to use Rank/Window functions or if there's another approach.

Any assistance would be appreciated!

Best Answer

  • MichelleH
    MichelleH Coach
    Answer ✓

    @pstrauss If you're using MagicETL, I'd recommend a combination of the Group by tile and a Filter Rows tile. In the Group by tile, group by user_id and create the below formula to check whether all of the rows for each user_id have a value of "false_inquiry":

    case when count(case when inquiry_type = 'false_inquiry' then user_id end) = count(user_id) then 'Exclude' else 'Include' end

    Then join your grouped data back to the original by user_id and use the Filter Rows tile to remove any rows marked with "Exclude"

Answers

  • MichelleH
    MichelleH Coach
    Answer ✓

    @pstrauss If you're using MagicETL, I'd recommend a combination of the Group by tile and a Filter Rows tile. In the Group by tile, group by user_id and create the below formula to check whether all of the rows for each user_id have a value of "false_inquiry":

    case when count(case when inquiry_type = 'false_inquiry' then user_id end) = count(user_id) then 'Exclude' else 'Include' end

    Then join your grouped data back to the original by user_id and use the Filter Rows tile to remove any rows marked with "Exclude"