2010-11-16 34 views
0

我有一个表,名为Type,它可以有三个值(name1,name2,name3)。Oracle sql函数

我可以编写一个查询其第一与Type = name1,然后返回记录与价值观name2name3WHERE子句中的行,这样我就可以通过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

这听起来像你可能希望只根据日期和类型=“名称1”的顺序优先和特别需要的剩余为了在本质上是随机的。如果是这种情况,可以在PMV或Insane的查询中将dbms_random.value添加为ORDER BY中的第三项。样品表和示例如下:

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;