It's better to have complex queries in DAO because generally speaking, the database is better at processing complex queries than code that you can write. Plus, doing aggregation/filtering in the service tier requires you to send a lot of data over the network from database to the app server, which would reduce throughput.
Remember that the main reason you want to put all your business logic in the service layer is to make it maintainable and easier to understand. So, as far as I'm concerned, all the if conditions and the for loops related to business logic should be in the service layer. It's fine if your DAO is doing filtering, as lo as the DAO methods are very concise.
You should be able to look at the service implementation and know what the application is doing. It's fine if you DAO has more than basic crud methods.