SQL-запрос Ранние / поздние даты - PullRequest
1 голос
/ 20 апреля 2011

Я пытаюсь создать представление SQL, основанное на результатах самых ранних и самых поздних дат. Мне известны функции min и max, но я не смог правильно их реализовать. Пока что у меня есть:

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 строки, в которых есть строка, содержащая все данные за самую раннюю дату, и другая, содержащая все данные за самую раннюю дату, а не два столбца, разделяющих ранние и поздние даты.

Спасибо.

1 Ответ

2 голосов
/ 20 апреля 2011

Упрощено для удобства чтения:

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)

Добавить вычисленные выражения вместо *.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...