powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Максимизировать по одному полю, а внутри по другому
11 сообщений из 11, страница 1 из 1
Максимизировать по одному полю, а внутри по другому
    #36364604
Nitro_Junkie
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Допустим стоит задача есть таблица document - документ, у которой поля id - индентификатор и date - дата. Необходимо найти последний документ, у которого наибольшая дата (date) и "внутри его" наибольший id документа. Есть ли какие-то расширения SQL которые позволяют это сделать без подзапроса - найти сначала максимальную дату, затем "отобрать" все документы с такой датой и найти максимальный id?
...
Рейтинг: 0 / 0
Максимизировать по одному полю, а внутри по другому
    #36364674
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ORDER BY date DESC, id DESC вас чем не устраивает?
...
Рейтинг: 0 / 0
Максимизировать по одному полю, а внутри по другому
    #36364745
Nitro_Junkie
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksoft,

Добавим в задачу, что для документа есть склад (store), и нужно сделать тоже самое в разрезе складов...
...
Рейтинг: 0 / 0
Максимизировать по одному полю, а внутри по другому
    #36364762
Nitro_Junkie
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Конечно можно теоретически сделать так

SELECT store.id, a.date,a.id FROM store LEFT JOIN (SELECT TOP 1 date,id FROM document WHERE document.store=store.id ORDER BY date DESC,id DESC) AS a ON 1=1

но все равно как-то не красиво, используется внешняя таблица в подзапросе (а без этого никак), плюс TOP 1 тоже не очень элегантное решение и непонятно как оптимизируется...
...
Рейтинг: 0 / 0
Максимизировать по одному полю, а внутри по другому
    #36367301
АнатоЛой
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Nitro_JunkieДопустим стоит задача есть таблица document - документ, у которой поля id - индентификатор и date - дата. Необходимо найти последний документ, у которого наибольшая дата (date) и "внутри его" наибольший id документа. Есть ли какие-то расширения SQL которые позволяют это сделать без подзапроса - найти сначала максимальную дату, затем "отобрать" все документы с такой датой и найти максимальный id?
То есть одним SELECT оператором - но можно пользоваться "расширениями"? Пользовательская ХП, которая по ид склада возвращает нужные столбцы (подзапрос прячется в ХП) :) ...
...
Рейтинг: 0 / 0
Максимизировать по одному полю, а внутри по другому
    #36367473
Naf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
SELECT T.STORE, 
MAX(D.ID) AS MAXID
(SELECT MAX(DATE) AS MAXDATE,
STORE
FROM DOCUMENT 
GROUP BY STORE) AS T
INNER JOIN DOCUMENT AS D
ON (T.MAXDATE=D.DATE) AND (T.STORE=D.STORE)
GROUP BY T.STORE
С уважением, Naf
...
Рейтинг: 0 / 0
Максимизировать по одному полю, а внутри по другому
    #36368710
Nitro_Junkie
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Naf,

Я понимаю что обычным SQL-92 и надо так делать, а нету ли конструкции типа :

SELECT T.STORE, MAX(D.DATE,D.ID) AS MAXDATE,MAXID FROM T DOCUMENT GROUP BY T.STORE
?
...
Рейтинг: 0 / 0
Максимизировать по одному полю, а внутри по другому
    #36368713
Nitro_Junkie
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
АнатоЛой,

Расширениями в рамках SQL (типа Window функций) а не сбоку как ХП?
...
Рейтинг: 0 / 0
Максимизировать по одному полю, а внутри по другому
    #36368717
Naf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Nitro_JunkieNaf,

Я понимаю что обычным SQL-92 и надо так делать, а нету ли конструкции типа :

SELECT T.STORE, MAX(D.DATE,D.ID) AS MAXDATE,MAXID FROM T DOCUMENT GROUP BY T.STORE
?нет, такого нет, если ваша субд не поддерживает пользовательские агрегатные функции
я сам хотел такого Минимум/максимум среди наборов
...
Рейтинг: 0 / 0
Максимизировать по одному полю, а внутри по другому
    #36368845
Nitro_Junkie
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Naf,

Ясно, спасибо...

Что-то мне подсказывает что при использовнии пользовательских агрегатных функций, при таком поиске явно индексы использоваться не будут, так что подзапросом по идее эффективнее...
...
Рейтинг: 0 / 0
Максимизировать по одному полю, а внутри по другому
    #36370714
А при чём здесь проектирование БД?
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Максимизировать по одному полю, а внутри по другому
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]