Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Tajemnica rownum w wyroczni

ROWNUM jest dziwne, ponieważ może zostać ocenione jako część warunku w zapytaniu - ale jeśli wiersz nie przejdzie następnie tego filtra, ROWNUM przypisana wartość staje się dostępna do ponownego użycia w następnym wierszu.

Jednym z ważnych efektów tego jest to, że jeśli użyjesz dowolnego warunku, który wyklucza ROWNUM wartość 1, nigdy nie dostaniesz dopasowania. Pierwszym wierszem, który zostanie przetestowany pod kątem tego warunku, będzie wiersz 1; ale wtedy nie przejdzie testu, więc następny wiersz zostanie uznany za wiersz 1; i tak dalej.

Więc twój stan ROWNUM BETWEEN 2 AND 4 nigdy nie może być prawdą.

Znalezione obejście jest tradycyjne. Innym byłoby użycie funkcji analitycznej do uszeregowania wierszy, a następnie filtrowanie według rangi, np.:

SELECT MI.* FROM (
  SELECT USER_ID,CUSTOMER_NAME, RANK() OVER (ORDER BY CREATION_DATE DESC) AS the_rank
  FROM ELEC_AUTO_MERC 
  ) MI
WHERE the_rank BETWEEN 2 AND 4;

W tym celu można użyć kilku funkcji analitycznych — RANK, DENSE_RANK i ROW_NUMBER — i dadzą one nieco inne wyniki, zwłaszcza w przypadku remisów. Zapoznaj się z dokumentacją.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Używanie DateDiff() w Oracle

  2. Jaka jest różnica między precyzją a skalą?

  3. SQL - Policz liczbę zmian w uporządkowanej liście

  4. Zmień separator funkcji WM_CONCAT w Oracle 11gR2

  5. Kod inicjator Oracle PDO-oci