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

start [/forum/topic.php?fid=32&msg=36364762&tid=1542935]: |
0ms |
get settings: |
9ms |
get forum list: |
18ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
186ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
69ms |
get tp. blocked users: |
1ms |
| others: | 212ms |
| total: | 518ms |

| 0 / 0 |
