Subscribers don't get 'held' status the same way with soft and hardbounces, an address has to softbounce rather consistently to become 'held'. See this documentation:
https://help.salesforce.com/articleView?id=mc_es_bounce_mail_management.htm&type=5
If that doesn't change anything for you, then you will probably have to turn to the _Bounce data view which holds the bounce details for the last six months.
https://help.salesforce.com/articleView?id=mc_as_data_view_bounce.htm&type=5
You could INNER JOIN this data view with your subscriber base and check for records with BounceCategory = 'Hard Bounce'.
SELECT DISTINCT SubscriberKey FROM _Subscribers s
/*depending on where you run this, ENT. prefix if from child BU */
INNER JOIN _bounce b
on s.subscriberkey = b.subscriberkey
WHERE s.Status = 'held'
and b.bounceCategory = 'Hard Bounce'
Note that the bounce data view holds events, so you can and likely will have several events per subscriber, if you're only joining on SubscriberKey.
This is ok for your requirement I presume. An approach could be that anyone with at least one hard bounce event qualifies for hard bounce, hence the DISTINCT.
To not run into this in the future (not an adhoc solution), there are several approaches:
a) 'mirror' the complete data views through SQL into data extensions regularly if you need a longer timeframe
b) An alternative is to have running processes that process data daily, then the six months timeframe is not an issue.