SQL вопрос(Oracle)
-
- Уже с Приветом
- Posts: 188
- Joined: 13 May 2003 00:55
- Location: USA
SQL вопрос(Oracle)
Скажем, есть такие вот таблицы:
T1 (NAME, CODE)
T2 (CODE, CR_DATE, TYPE)
И такой запрос:
SELECT T1.NAME, MAX(T2.CR_DATE) FROM T1, T2
WHERE T1.CODE = T2.CODE (+)
GROUP BY T1.NAME
Другими словами запрос должен вернуть все записи из T1 + для каждой из них максимальную дату из той группы записей в T2, где CODE соответствует коду из T1 (если такие есть)
Вопрос, как добавить к результату поле TYPE соответствующее возвращенной дате.
Спасибо
T1 (NAME, CODE)
T2 (CODE, CR_DATE, TYPE)
И такой запрос:
SELECT T1.NAME, MAX(T2.CR_DATE) FROM T1, T2
WHERE T1.CODE = T2.CODE (+)
GROUP BY T1.NAME
Другими словами запрос должен вернуть все записи из T1 + для каждой из них максимальную дату из той группы записей в T2, где CODE соответствует коду из T1 (если такие есть)
Вопрос, как добавить к результату поле TYPE соответствующее возвращенной дате.
Спасибо
Last edited by GeneDupe on 18 Mar 2004 20:27, edited 1 time in total.
-
- Уже с Приветом
- Posts: 28294
- Joined: 29 Aug 2000 09:01
- Location: SPB --> Gloucester, MA, US --> SPB --> Paris
-
- Уже с Приветом
- Posts: 188
- Joined: 13 May 2003 00:55
- Location: USA
-
- Уже с Приветом
- Posts: 28294
- Joined: 29 Aug 2000 09:01
- Location: SPB --> Gloucester, MA, US --> SPB --> Paris
-
- Уже с Приветом
- Posts: 188
- Joined: 13 May 2003 00:55
- Location: USA
-
- Уже с Приветом
- Posts: 4468
- Joined: 21 Sep 2000 09:01
- Location: Sammamish, WA
GeneDupe wrote:Спасибо, посмотрим. А стандартный ANSI SQL? Что-то мне казалось, что это элементарная ситуация, только я что-то не соображу. Я написал с вложенными запросами - медленно выходит.
В стандаре этого нет. Если со вложенным запросом медленно - то оптимайзер сакс. При условии, что вложенный запрос написан правильно и есть нужные индексы.
Cheers
-
- Уже с Приветом
- Posts: 188
- Joined: 13 May 2003 00:55
- Location: USA
-
- Уже с Приветом
- Posts: 1224
- Joined: 07 Sep 1999 09:01
- Location: Belmont, Ca
-
- Уже с Приветом
- Posts: 664
- Joined: 05 Jun 2002 01:11
Re: SQL вопрос(Oracle)
GeneDupe wrote:Скажем, есть такие вот таблицы:
T1 (NAME, CODE)
T2 (CODE, CR_DATE, TYPE)
И такой запрос:
SELECT T1.NAME, MAX(T2.CR_DATE) FROM T1, T2
WHERE T1.CODE = T2.CODE (+)
GROUP BY T1.NAME
Другими словами запрос должен вернуть все записи из T1 + для каждой из них максимальную дату из той группы записей в T2, где CODE соответствует коду из T1 (если такие есть)
Вопрос, как добавить к результату поле TYPE соответствующее возвращенной дате.
Спасибо
SQL-92:
Code: Select all
select a.name,
b.cr_date,
b.typ1
from t1 a left join
( select code, cr_date, typ1
from t2 where (code, cr_date) in (select code, max(cr_date) from t2 group by code)
) b
on a.code=b.code
... below 9i:
Code: Select all
select a.name,
b.cr_date,
b.typ1
from t1 a ,
( select code, cr_date, typ1
from t2 where (code, cr_date) in (select code, max(cr_date) from t2 group by code)
) b
where a.code=b.code(+)
-
- Уже с Приветом
- Posts: 664
- Joined: 05 Jun 2002 01:11
-
- Уже с Приветом
- Posts: 664
- Joined: 05 Jun 2002 01:11
Re: SQL вопрос(Oracle)
GeneDupe wrote:Скажем, есть такие вот таблицы:
T1 (NAME, CODE)
T2 (CODE, CR_DATE, TYPE)
И такой запрос:
SELECT T1.NAME, MAX(T2.CR_DATE) FROM T1, T2
WHERE T1.CODE = T2.CODE (+)
GROUP BY T1.NAME
Другими словами запрос должен вернуть все записи из T1 + для каждой из них максимальную дату из той группы записей в T2, где CODE соответствует коду из T1 (если такие есть)
Вопрос, как добавить к результату поле TYPE соответствующее возвращенной дате.
Спасибо
SQL-99:
Code: Select all
select a.name,
b.cr_date,
b.typ1
from t1 a left join
(select code, cr_date, typ1
from (select code, cr_date, typ1, max(cr_date) over(partition by code) m_date
from t2)
where cr_date=m_date
) b
on a.code=b.code
Only two FTSs as opposed to three in the SQL-92 solution.
P.S. I substituted typ1 for type because type is a keyword.
VC
-
- Уже с Приветом
- Posts: 188
- Joined: 13 May 2003 00:55
- Location: USA
Re: SQL вопрос(Oracle)
vc wrote:Only two FTSs as opposed to three in the SQL-92 solution.
Thanks, man
P.S. I substituted typ1 for type because type is a keyword.
VC
Yes, I know. In the real db the field names are different