Define MYSQL index with condition
Sounds like:


if action=1, then ref_transaction_id can only be 0, and
if ref_transaction_id=0, the action can only be 1


If that's correct, then the query may be simplified:

select * 
from transactions 
where `created` between "?" and "?" and `action`=1;


Notes:


add an index for action to help the query
use between to range check the date; suspect minor performance improvement




Unsolicited Observations

This sounds like a linked list (ref_transaction_ids) and a state machine (action). If that's true, or close, may want to consider putting that info into a separate "association" table, 

....
`fk_id` bigint(20) NOT NULL,
`transaction_id` bigint(20) NOT NULL,
`fk_prior_id` bigint(20) NOT NULL COMMENT "replaces use of ref_transaction_id",
`action` smallint(6) NOT NULL,
....


Notes:


introduces fk_prior_id as a way of finding the ref_transaction_id using a field which is already indexed, id
consider adding the date fields depending on the 
nature of the data
consider defining action as an enum to capture the state and improve readability; still stored as an integer internally but may be referenced using the defined "states" in queries.