2010-11-16 4 views
0

У меня есть таблица с колонкой Type, которая может иметь три значения (name1, name2, name3).Oracle sql functions

Могу ли я написать запрос, который возвращает первые записи с Type = name1, а затем строки со значениями name2 и name3 с пунктом WHERE, так что может фильтровать их по CreationDate, например?

Это означает, что вернуться за день 01/01/2000:

row 'name1' 
row 'name1' 
(rest of the rows) 

Id Type CreationDate 
1, 'name1', '2000/01/01' 
8, 'name1', '2000/01/01' 
18, 'name3', '2000/01/01' 
82, 'name2', '2000/01/01' 
11, 'name2', '2000/01/01' 
12, 'name3', '2000/01/01' 
2, 'name1', '2000/01/02' 
4, 'name1', '2000/01/02' 
98, 'name2', '2000/01/02' 

На каждый день, получить записи типа «имя1» первый, а затем остальные типы только с не в порядке.

Спасибо! Ты делаешь.

ответ

5

Вы можете заказать, создав дату и тип. Если вам нужно определить порядок типа, вы можете использовать случай.

SELECT id, Type, CreationDate 
FROM "table" 
ORDER BY CreationDate ASC, 
     CASE WHEN Type = 'name1' THEN 1 
       ELSE 2 
     END ASC 
0

Ответ PMV выше должен работать нормально. Помещая это как альтернативный вариант.

SELECT id, Type, CreationDate 
FROM "table" 
ORDER BY CreationDate, decode(Type , 'name1', 0, 1), Type ASC 
0

Это звучит, как вы можете определить приоритеты упорядоченность только на основе даты и типа = «name1» и, в частности необходимо остающийся порядок случайный характер. Если это так, вы можете добавить dbms_random.value в качестве третьего элемента в ORDER BY в запросе PMV или Insane. Пример таблицы и пример:

create table Table1 (Id Number(2), Type Varchar2(5), CreationDate Date); 
insert into Table1 Values (1,'name1',to_date('01/01/2000','MM/DD/YYYY')); 
insert into Table1 Values (8,'name1',to_date('01/01/2000','MM/DD/YYYY')); 
insert into Table1 Values (18,'name3',to_date('01/01/2000','MM/DD/YYYY')); 
insert into Table1 Values (82,'name2',to_date('01/01/2000','MM/DD/YYYY')); 
insert into Table1 Values (11,'name2',to_date('01/01/2000','MM/DD/YYYY')); 
insert into Table1 Values (12,'name3',to_date('01/01/2000','MM/DD/YYYY')); 
insert into Table1 Values (2,'name1',to_date('01/02/2000','MM/DD/YYYY')); 
insert into Table1 Values (4,'name1',to_date('01/02/2000','MM/DD/YYYY')); 
insert into Table1 Values (98,'name2',to_date('01/02/2000','MM/DD/YYYY')); 

SELECT Id, Type, CreationDate FROM Table1 
ORDER BY CreationDate, decode(Type , 'name1', 0, 1) ASC, dbms_random.value;