Query for pages in parent with tag and start/end date

We’ve got a bunch of people moving in and out of my team, and some permanents. I’ve got a bunch of people in pages called People/Adam, People/Eve, etc., and the temporary ones have tags:: temp and start-date:: 2022-09-01 and end-date:: 2022-10-15.

I’m trying to formulate a query that shows the People\* who have tags:: temp and whose start-date:: is <= today and end-date:: is >= today.

So far I have managed to put this together by mashing together a few different examples:

#+BEGIN_QUERY
{
  :title "Active Temps"
  :inputs [:today]
  :query [
    :find (pull ?b [*])
    :in $ ?today
    :where
      [?b :block/properties ?properties]
      [(get ?properties :start-date) ?start-date]
      [(get ?properties :end-date) ?end-date]
      [(and (<= ?start-date ?today) (>= ?end-date ?today))] ] }
#+END_QUERY

This sort-of works, but there are a few problems with it and I’m not sure how to fix it:

  • I don’t think this is showing pages, it’s showing blocks, right?
  • It’s not filtering based on People\* pages
  • It’s not filtering based on presence of “temp” tag
  • The results are duplicated. Each result appears twice

I’ve spent a few hours trying to get this working but so far no luck. Any Datalog gurus out there can lend me a hand please?