I am developing an application that allows users to read books. I am using DynamoDB for storing details of the books that user reads and I plan to use the data stored in DynamoDB for calculating statistics, such as trending books, authors, etc.

My current schema looks like this:

```
user_id | timestamp | book_id | author_id 

```

user\_id is the partition key, and timestamp is the sort key.

The problem I am having is that, with this schema I am only able to query 
the details of the books that a single user (partition key) has read. That is one of the requirements for me.

The other requirement is to query all the records that has been created in a certain date range, eg: records created in the past 7 days. With this schema, I am unable to run this query. 

I have looked into so many other options, and haven't figured out a way to create a schema that would allow me to run both queries.

* Retrieve the records of the books read by a single user (Can be done).
* Retrieve the records of books read by all the users in last x days (Unable to do it).

I do not want to run a scan, since It will be expensive and I looked into the option of using GSI for timestamp, but it requires me to specify a hash key, and therefore I cannot query all the records created between 2 dates.