LINUX.ORG.RU

SQL


0

1

Приветствую всех!

Есть таблица code_type вида:

id - уникальный идентификатор
code - некий код
date - дата
name - имя

code - это некая постоянная величина.
Для неё есть несколько имён (name)
data - это дата, когда коду присвоено новое имя

То есть в большой-большой таблице может храниться много кодов, но:
для каждого кода есть несколько имён и, соответственно, дата, когда было присвоено новое имя.

Мне бы хотелось одним запросом выяснить имя, которое было присвоено
конкретному коду в последний раз.

В лоб эта задача решается так:

SELECT name FROM code_type WHERE code=xxxx AND date=(SELECT max(date) FROM code_type GROUP BY code WHERE code=xxxx);

Вопрос: как это сделать без вложенного запроса?

БД Postgres



Последнее исправление: solom (всего исправлений: 1)

where date=max(date)

?

anonymous
()

а зачем без вложенного? Производительность не устраивает? Может тогда стоит изучить другие способы?(например сделать правильные индексы)

recon88
()
Ответ на: комментарий от recon88

Индексы там построены, просто таблиц больше и запрос большой. Но другие способы буду искать.

solom
() автор топика
Ответ на: комментарий от Eshkin_kot

Вот это уже интереснее, спасибо.

solom
() автор топика
Ответ на: комментарий от aydar

нет, нет, без вложенных запросов :)

solom
() автор топика
Ответ на: комментарий от solom

В Oracle можно было бы ещё так:

SELECT name 
FROM code_type 
WHERE code=xxxx AND rownum=1
ORDER BY date DESC;

Не знаю, есть ли в PostgreSQL ROWNUM.

anonymous
()
Ответ на: комментарий от yltsrc

Да, я забыл упомянуть это в «решении в лоб». Увы - довольно медленно и не встроишь в составной запрос.

А вообще - спасибо всем!

solom
() автор топика
Ответ на: комментарий от anonymous

Спасибо, на Постгрес не знает, что есть такое rownum.

solom
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.