Я пытаюсь выбрать данные о продажах за последние 10 дней и включать дату с 0, где не было продаж.Использование Oracle для получения последних десяти дней продаж, даже если у дня нет ни одного
Для этого я экспериментирую с использованием двойного и подключаюсь по уровню, но я не знаю, почему даты не совпадают, а запрос не работает.
Вот основной рабочий запрос:
SELECT
current_date - (LEVEL - 1)
,(LEVEL - 1) as result
FROM Dual CONNECT BY Level <= 10
order by result desc
И результаты:
Current_date-(LEVEL-1) RESULT
13-MAR-15 9
14-MAR-15 8
15-MAR-15 7
16-MAR-15 6
17-MAR-15 5
18-MAR-15 4
19-MAR-15 3
20-MAR-15 2
21-MAR-15 1
22-MAR-15 0
Так я думал, что это будет работать замечательно, Теперь, когда у меня были даты, что я хотел, я мог попробуйте добавить подзапрос для получения продаж (я думал о соединении, но не понял, как присоединиться к уровню в запросе):
SELECT
current_date - (LEVEL - 1)
,(select count(1) from sales where for_date=(current_date - (LEVEL - 1))) as sale_volume
,(LEVEL - 1) as result
FROM Dual CONNECT BY Level <= 10
order by result desc
Тем не менее, всегда Retuns 0, даже в те дни, которые я знаю, есть продажи:
Current_date-(LEVEL-1) SALE_VOLUME RESULT
13-MAR-15 0 9
14-MAR-15 0 8
15-MAR-15 0 7
16-MAR-15 0 6
17-MAR-15 0 5
18-MAR-15 0 4
19-MAR-15 0 3
20-MAR-15 0 2
21-MAR-15 0 1
22-MAR-15 0 0
По какой-то причине мне не понравилось, что я назвал подзапрос «DateRangeTbl», но был доволен удалением, так как он все равно возвращает все 0s, и это заставляет меня думать, что что-то не так с совпадением дат. – nycynik
В столбце for_date также есть Times? – Aheho
Это столбец «дата» в оракуле, и если я запрашиваю его, он показывает «2015-03-15 00:00:00» – nycynik