You can probably get what you want using org-modes confusing set of parameters but it's probably just easier creating a custom filter function
(defun my/org-skip-function (part)
"Partitions things to decide if they should go into the agenda '(agenda future-scheduled done)"
(let* ((skip (save-excursion (org-entry-end-position)))
(dont-skip nil)
(scheduled-time (org-get-scheduled-time (point)))
(result
(or (and scheduled-time
(time-less-p (current-time) scheduled-time)
'future-scheduled) ; This is scheduled for a future date
(and (org-entry-is-done-p) ; This entry is done and should probably be ignored
'done)
'agenda))) ; Everything else should go in the agenda
(if (eq result part) dont-skip skip)))
(setq org-agenda-skip-function '(my/org-skip-function 'agenda))
If you want other filters just add them to the or
-block with a different tag.