2011-04-20 210 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