i have a trouble with dates, i need to do a query that count the ids from the last four weeks.
I tried this, but it doesn’t works.
x
SELECT count(a.id), sysdate
FROM table_1 a, table_2 b
WHERE b.fk_id = a.id
AND a.column = some_id
CONNECT BY LEVEL <=4
I need a output like this
| count(a.id) | week |
| 2 | 1 |
| 6 | 2 |
| 7 | 3 |
| 21 | 4 |
So, the ” count(a.id) ” values are the count of the ID’s in one of the past 4 weeks.
Advertisement
Answer
Here’s a MS SQL Server solution. You should be able to convert it to Oracle if needed.
select count(id) as 'count(a.id)'
, datepart(week, MyDate) as 'week'
from table_1
where datepart(week, MyDate) between datepart(week, getdate()) - 5 and datepart(week, getdate()) - 1
group by datepart(week, MyDate)
And here’s my attempt at doing this in Oracle.
select count(a.id)
, Week
from (
select cast(TO_CHAR(MyDate, 'WW') as int) +
case when cast(TO_CHAR(MyDate, 'D') as int) < cast(TO_CHAR(trunc(MyDate, 'year'), 'D') as int) then 1 else 0 end Week
, id
, MyDate
from table_1
) a
where a.MyDate between sysdate - cast(TO_CHAR(sysdate, 'D') as int) - 28 + 1 and sysdate - cast(TO_CHAR(sysdate, 'D') as int)
group by Week