Question: here is my code

```
SELECT h.ENTERED_DATE,
       d.DENOMINATION,
       sum(h.invoice_total-h.TOTTAL_DISCOUNT)as amount 
  FROM sales_details d
       LEFT JOIN sales_header h 
            ON d.invoice_id=h.invoice_id
 WHERE entered_by='2254'
--HERE IS NEED TO GET DETAILS CURRENT MONTH 1st Date to Sysdate 
GROUP BY 
       ENTERED_DATE,
       d.DENOMINATION
ORDER BY 
       entered_date,
       denomination

```

* In my application just send only **sysdate** as parameter.
**no need to SYSDATE-30.
need 1st date to SYSDATE**

here shows my two tables
**sales\_header table**
![enter image description here](https://i.stack.imgur.com/AWcn6.png)

**sales\_details table**
![enter image description here](https://i.stack.imgur.com/viDLQ.png)

Answer: 
Mudassir's answer worked for me but I would also check the year to make sure you are not getting last year's records.

```
WHERE TO_CHAR(ENTERED_DATE, 'mm') = TO_CHAR(SYSDATE, 'mm')
  AND TO_CHAR(ENTERED_DATE, 'yyyy') = TO_CHAR(SYSDATE, 'yyyy')

```

Also, if you are running a large query, functions in your `WHERE` clause can slow it down. If so, you may want to consider a function based index.
```
select 'WITHIN' as result 
from dual
where '28-FEB-2019' between trunc(last_day(add_months(sysdate, -1))+1) and trunc(last_day(sysdate));

```

Take care because there are many examples that are using just the month and because of that you could get records from all the year, year is not being considered.
Also as you can see I am using trunc it is to avoid timing inconsistencies and just use the date.