int month = Calendar.getInstance().get( Calendar.MONTH ) + 1;
int quarter = month % 3 == 0? (month / 3): ( month / 3)+1;
По словам Тома Кайта: «Если и пока вы не добавите в запрос« порядок по », вы не сможете НИЧЕГО сказать о порядке возвращаемых строк. Ну, если не считать« вы не можете полагаться на порядок возвращаемых строк '. "
См. этот вопрос на asktom.com.
Что касается ROWNUM, то его физически не существует, поэтому его нельзя «освободить». ROWNUM присваивается после получения записи из таблицы, поэтому «WHERE ROWNUM = 5» всегда не будет выбирать какие-либо записи.
@ammoQ: вы можете прочитать эту статью AskTom на GROUP BY заказ. Вкратце:
Гарантирует ли предложение Group By в запросе, что выходные данные будут отсортировано по столбцам "Группировать по" в заказ, даже если нет заказа по пункт?
и мы сказали ...
АБСОЛЮТНО НЕТ,
Никогда не было, никогда не было, никогда будет.
Явного порядка следования по умолчанию нет. По очевидным причинам, если вы создаете новую таблицу, вставляете несколько строк и выполняете «select *» без предложения «where», она (очень вероятно) вернет строки в том порядке, в котором они были вставлены.
Но вы никогда не следует полагаться на срабатывание порядка по умолчанию. Если вам нужен конкретный порядок, используйте предложение «порядок по». Например, в версиях Oracle до 9i выполнение «group by» также приводило к сортировке строк по выражению group. В 10g такого поведения больше нет! Из-за этого мне пришлось потрудиться при обновлении инсталляций Oracle.
Уже говорилось, что Oracle разрешено выдавать вам строки в любых заказ, который он хочет, когда вы не указываете предложение ORDER BY. Гадать, какой будет порядок, если вы не укажете предложение ORDER BY, бессмысленно. И полагаться на него в вашем коде - это «ход, ограничивающий карьеру».
Простой пример:
SQL> create table t as select level id from dual connect by level <= 10
2 /
Tabel is aangemaakt.
SQL> select id from t
2 /
ID
----------
1
2
3
4
5
6
7
8
9
10
10 rijen zijn geselecteerd.
SQL> delete t where id = 6
2 /
1 rij is verwijderd.
SQL> insert into t values (6)
2 /
1 rij is aangemaakt.
SQL> select id from t
2 /
ID
----------
1
2
3
4
5
7
8
9
10
6
10 rijen zijn geselecteerd.
И это только после простого удаления + вставки. Есть и множество других возможных ситуаций. Параллельное выполнение, разделы, упорядоченные по индексу таблицы и многие другие.
Хотя это должно быть rownnum (ваш №2), это действительно не гарантируется, и вы не должны доверять ему на 100%.
Я считаю, что он использует скрытый атрибут Rownum Oracle.
Так что ваш № 1, вероятно, прав, если предположить, что не было сделано никаких удалений, которые могли бы освободить rownums для дальнейшего использования.
EDIT: Как говорили другие, вам действительно не следует полагаться на это никогда. Помимо удаления существует множество различных условий, которые могут повлиять на поведение сортировки по умолчанию.