2010-11-16 65 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;