Oracle
 sql >> база данни >  >> RDS >> Oracle

Намиране на пропуски в последователността в таблица в Oracle

Намиране на пропуски в последователността в таблица в Oracle

Проблем
Искате да намерите всички пропуски в последователността от числа или в датите и часовете във вашите данни. Пропуските биха могли
да бъдат в дати, записани за дадено действие, или в някои други данни с логически последователен характер.
Решение
Функциите на Oracle LAG и LEAD OLAP ви позволяват да сравните текущия ред с резултати с предходен ред.
Общият формат на LAG изглежда така
Lag (колона или израз, изместване на предходния ред, по подразбиране за първия ред)
Колоната или изразът е стойността, която трябва да се сравнява с изоставащи (предхождащи) стойности. Предходното
отместване на ред показва колко реда преди текущия ред трябва да действа LAG. Използвахме „1“ в
следния списък, за да означава ред един преди текущия ред. По подразбиране за LAG указва каква
стойност да се използва като прецедент за първия ред, тъй като в таблица или резултат няма ред нула. Инструктираме Oracle
да използва 0 като стойност на котва по подразбиране, за да се справи със случая, в който търсим деня преди първия от
месеца.
Може да се използва подходът WITH псевдоним на заявка в почти всички ситуации, когато се използва подзаявка, за
преместване на детайлите на подзаявката преди основната заявка. Това подпомага четимостта и преструктурирането на кода, ако
е необходимо на по-късна дата.
Тази рецепта търси пропуски в последователността от дни, в които са направени поръчките за месец
ноември 1999 г.:

с дни за продажба като
(изберете извлечение(ден от датата_на_поръчка) следваща_продажба,
закъснение(извлечение(ден от датата_на_поръчка),1,0)
над (поръчка по извлечение(ден от датата_на_поръчка)) prev_sale
от oe.orders
където поръчка_дата между '01-NOV-1999' и '30-NOV-1999')
изберете предишна_разпродажба, следваща_разпродажба
от разпродажба
където next_sale - prev_sale> 1
order by prev_sale;
Нашата заявка разкрива пропуските в дни между продажбите за месец ноември 1999 г.

ПРЕДИШНА_РАЗПРОДАЖБА СЛЕДВАЩА_ПРОДАЖБА
--------- ----------
1 10
10 14
15 19
20 22
Резултатите показват, че след записване на поръчка на първо число на месеца, последваща поръчка
не е записана до 10-то число. След това последва четиридневна разлика до 14-ти и т.н. Един проницателен мениджър по продажбите
може да използва тези данни, за да попита какво е правил екипът по продажбите в тези празни дни и защо не са постъпили поръчки
!

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Изсипване на CLOB полета във файлове?

  2. Как мога да експортирам съдържанието на таблица на Oracle във файл?

  3. SEC_CASE_SENSTIVE_LOGON в 12c

  4. ORA-24247:достъпът до мрежата е отказан от списъка за контрол на достъпа (ACL)

  5. Вмъкването на национални знаци в колона NCHAR или NVARCHAR на оракул не работи