
Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
|
14.12.2009, 12:02
|
|||
|---|---|---|---|
|
|||
Максимизировать по одному полю, а внутри по другому |
|||
|
#18+
Допустим стоит задача есть таблица document - документ, у которой поля id - индентификатор и date - дата. Необходимо найти последний документ, у которого наибольшая дата (date) и "внутри его" наибольший id документа. Есть ли какие-то расширения SQL которые позволяют это сделать без подзапроса - найти сначала максимальную дату, затем "отобрать" все документы с такой датой и найти максимальный id? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
14.12.2009, 12:23
|
|||
|---|---|---|---|
Максимизировать по одному полю, а внутри по другому |
|||
|
#18+
ORDER BY date DESC, id DESC вас чем не устраивает? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
14.12.2009, 12:41
|
|||
|---|---|---|---|
|
|||
Максимизировать по одному полю, а внутри по другому |
|||
|
#18+
miksoft, Добавим в задачу, что для документа есть склад (store), и нужно сделать тоже самое в разрезе складов... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
14.12.2009, 12:46
|
|||
|---|---|---|---|
|
|||
Максимизировать по одному полю, а внутри по другому |
|||
|
#18+
Конечно можно теоретически сделать так 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 тоже не очень элегантное решение и непонятно как оптимизируется... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
15.12.2009, 14:45
|
|||
|---|---|---|---|
Максимизировать по одному полю, а внутри по другому |
|||
|
#18+
Nitro_JunkieДопустим стоит задача есть таблица document - документ, у которой поля id - индентификатор и date - дата. Необходимо найти последний документ, у которого наибольшая дата (date) и "внутри его" наибольший id документа. Есть ли какие-то расширения SQL которые позволяют это сделать без подзапроса - найти сначала максимальную дату, затем "отобрать" все документы с такой датой и найти максимальный id? То есть одним SELECT оператором - но можно пользоваться "расширениями"? Пользовательская ХП, которая по ид склада возвращает нужные столбцы (подзапрос прячется в ХП) :) ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
15.12.2009, 15:32
|
|||
|---|---|---|---|
Максимизировать по одному полю, а внутри по другому |
|||
|
#18+
Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
16.12.2009, 10:10
|
|||
|---|---|---|---|
|
|||
Максимизировать по одному полю, а внутри по другому |
|||
|
#18+
Naf, Я понимаю что обычным SQL-92 и надо так делать, а нету ли конструкции типа : SELECT T.STORE, MAX(D.DATE,D.ID) AS MAXDATE,MAXID FROM T DOCUMENT GROUP BY T.STORE ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
16.12.2009, 10:11
|
|||
|---|---|---|---|
|
|||
Максимизировать по одному полю, а внутри по другому |
|||
|
#18+
АнатоЛой, Расширениями в рамках SQL (типа Window функций) а не сбоку как ХП? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
16.12.2009, 10:13
|
|||
|---|---|---|---|
Максимизировать по одному полю, а внутри по другому |
|||
|
#18+
Nitro_JunkieNaf, Я понимаю что обычным SQL-92 и надо так делать, а нету ли конструкции типа : SELECT T.STORE, MAX(D.DATE,D.ID) AS MAXDATE,MAXID FROM T DOCUMENT GROUP BY T.STORE ?нет, такого нет, если ваша субд не поддерживает пользовательские агрегатные функции я сам хотел такого Минимум/максимум среди наборов ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
16.12.2009, 11:01
|
|||
|---|---|---|---|
|
|||
Максимизировать по одному полю, а внутри по другому |
|||
|
#18+
Naf, Ясно, спасибо... Что-то мне подсказывает что при использовнии пользовательских агрегатных функций, при таком поиске явно индексы использоваться не будут, так что подзапросом по идее эффективнее... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|

start [/forum/topic.php?fid=32&tablet=1&tid=1542935]: |
0ms |
get settings: |
7ms |
get forum list: |
17ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
167ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
59ms |
get tp. blocked users: |
2ms |
| others: | 233ms |
| total: | 504ms |

| 0 / 0 |
