I'm trying to query on constituents that have a value of less than 1 for an Engagement Factor field, but I get no results. I know there are some constituents that should be populating in this query.
If you recently set up a task for that Engagement Factor field, then the constituents are probably being excluded from your query because the field is blank. If the task doesn't find what it is looking for in a constituent record, then the task will skip over them and nothing will be populated in the Engagement Factor field; not even a 0. In your query, you should add an OR clause for Engagement Factor is blank.
As a side note, when an Engagement Factor field is populated with any number, then it can never be blank again. This means that if you see an Engagement Factor field that equals 0, it means the field used to be higher than 1, but is now 0, perhaps due to the timeframe in which the task looks for.
As an example, let's say we set up a task to populate a value of 1 for each email open that it finds in a constituent record within the last 7 days and the task is recurring daily. John Smith hasn't opened any emails and so the task skips over this record and the Engagement Factor field remains blank. The next day, John Smith opens an email. The task will find this next time it runs and populate a 1 in the field. Now John Smith hasn't opened an email in the last 8 days, so the task will change the field to a 0 and it can never be blank again.