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

Добавим в задачу, что для документа есть склад (store), и нужно сделать тоже самое в разрезе складов...
...
Рейтинг: 0 / 0
14.12.2009, 12:46
    #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
15.12.2009, 14:45
    #36367301
АнатоЛой
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Максимизировать по одному полю, а внутри по другому
Nitro_JunkieДопустим стоит задача есть таблица document - документ, у которой поля id - индентификатор и date - дата. Необходимо найти последний документ, у которого наибольшая дата (date) и "внутри его" наибольший id документа. Есть ли какие-то расширения SQL которые позволяют это сделать без подзапроса - найти сначала максимальную дату, затем "отобрать" все документы с такой датой и найти максимальный id?
То есть одним SELECT оператором - но можно пользоваться "расширениями"? Пользовательская ХП, которая по ид склада возвращает нужные столбцы (подзапрос прячется в ХП) :) ...
...
Рейтинг: 0 / 0
15.12.2009, 15:32
    #36367473
Naf
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
16.12.2009, 10:10
    #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
16.12.2009, 10:11
    #36368713
Nitro_Junkie
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Максимизировать по одному полю, а внутри по другому
АнатоЛой,

Расширениями в рамках SQL (типа Window функций) а не сбоку как ХП?
...
Рейтинг: 0 / 0
16.12.2009, 10:13
    #36368717
Naf
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
16.12.2009, 11:01
    #36368845
Nitro_Junkie
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Максимизировать по одному полю, а внутри по другому
Naf,

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

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


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