2011-04-20 349 views
1

我試圖根據最早和最近日期的結果創建一個SQL視圖。我知道最小和最大函數,但我無法正確實現它。到目前爲止,我有:SQL查詢早/晚日期

select distinct 
name, 
study, 
group, 
ROUND (TLength * POWER (TWidth, 2) * 0.000523, 3) as Volume, 
firstDate as firstDate, 
lastDate as lastDate 
from 
(select 
name, 
study, 
group, 
min(operation_time) firstDate, 
max(operation_time) lastDate, 
MAX(DECODE (ACTIVITY,'length', RESULT_VALUE, NULL)) TLength, 
MAX(DECODE (ACTIVITY,'width', RESULT_VALUE,NULL)) TWidth 
from mx_all_data_vw 
where mx_all_data_vw.study_name like '%MT%' 
group by name, group study); 

這給了我一個單獨的行,無論是最早或最晚日期,以及最早和最晚的日期兩列。

我想要2行,它有一行包含最早日期的所有數據,另一行包含最新日期的所有數據,而不是分隔早期和晚期日期的兩列。

謝謝。

回答

2

簡化了可讀性:

SELECT * 
FROM (
     SELECT mx_all_data_vw.*, 
       ROW_NUMBER() OVER (PARTITION BY name, study, "group" ORDER BY operation_time) rna, 
       ROW_NUMBER() OVER (PARTITION BY name, study, "group" ORDER BY operation_time DESC) rnd, 
       DECODE(activity, 'length', result_value, NULL) AS TLength, 
       DECODE(activity, 'width', result_value, NULL) AS TWidth 
     FROM mx_all_data_vw 
     WHERE mx_all_data_vw.study_name like '%MT%' 
     ) 
WHERE 1 IN (rna, rnd) 

添加而不是*計算表達式。

+0

謝謝,這工作得很好,除了上面的解碼部分。基本上我有一個名爲Activity的列,我希望從中獲取長度和寬度以擁有自己的列? – 2011-04-20 13:48:17

+0

@Darren:查看帖子更新。 – Quassnoi 2011-04-20 13:55:56

+0

@Quassnio,謝謝,但我現在得到一個錯誤,說'不是一個單一羣體功能'的任何想法?再次感謝。 – 2011-04-20 14:02:24