SQL> select systimestamp from dual;
SYSTIMESTAMP
-------------------------------------
07-MAR-16 08.02.41.691000 AM +08:00
SQL> create table DEVICE_POSITION_DATA ( device_id int, creation_date timestamp );
Table created.
SQL>
SQL> insert into DEVICE_POSITION_DATA
2 select 795, sysdate - rownum/1440
3 from dual
4 connect by level <= 100;
100 rows created.
SQL>
SQL> commit;
Commit complete.
SQL>
SQL> select *
2 from DEVICE_POSITION_DATA dpd
3 where dpd.device_id = 795
4 and dpd.creation_date > systimestamp - numtodsinterval(15,'MINUTE')
5 and dpd.creation_date > sysdate - 1
6 order by dpd.creation_date desc ;
DEVICE_ID CREATION_DATE
---------- ---------------------------------------------------------------------------
795 07-MAR-16 08.01.15.000000 AM
795 07-MAR-16 08.00.15.000000 AM
795 07-MAR-16 07.59.15.000000 AM
795 07-MAR-16 07.58.15.000000 AM
795 07-MAR-16 07.57.15.000000 AM
795 07-MAR-16 07.56.15.000000 AM
795 07-MAR-16 07.55.15.000000 AM
795 07-MAR-16 07.54.15.000000 AM
795 07-MAR-16 07.53.15.000000 AM
795 07-MAR-16 07.52.15.000000 AM
795 07-MAR-16 07.51.15.000000 AM
795 07-MAR-16 07.50.15.000000 AM
795 07-MAR-16 07.49.15.000000 AM
795 07-MAR-16 07.48.15.000000 AM
14 rows selected.
Send me your testcase like the one above so we can see where things are different in your environment