|
Аналог keep(dense_rank
|
|||
---|---|---|---|
#18+
Есть ли в sqlite аналог ораклового max(...) keep(dense_rank ...) То есть например есть таблица clstatus поля clientid, cldate, status надо найти для каждого клиента его статус на определенную дату. Можно написать типа Код: plaintext 1. 2. 3. 4. 5.
Код: plaintext 1. 2. 3.
... |
|||
:
Нравится:
Не нравится:
|
|||
29.11.2010, 12:05 |
|
Аналог keep(dense_rank
|
|||
---|---|---|---|
#18+
Используй "бабушкин" трюк . Работать будет на любой СУБД, имеющей в своем арсенале строковые функции и возможность агрегирования... ... |
|||
:
Нравится:
Не нравится:
|
|||
30.11.2010, 05:31 |
|
Аналог keep(dense_rank
|
|||
---|---|---|---|
#18+
Добрый Э - Эх, классный вариант, спасибо. Осталось узнать как обстоят дела в лайт со строковыми функциями :) ... |
|||
:
Нравится:
Не нравится:
|
|||
30.11.2010, 10:33 |
|
Аналог keep(dense_rank
|
|||
---|---|---|---|
#18+
ТропотоногОсталось узнать как обстоят дела в лайт со строковыми функциями :) Если нужной нет, то ее можно создать и зарегистрировать в SQLite. Кстати, можно создать свои собственные агрегатные функции. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.11.2010, 12:21 |
|
Аналог keep(dense_rank
|
|||
---|---|---|---|
#18+
По ходу дела выяснилось, что в лайт работает и такой вот запрос Код: plaintext 1. 2. 3. 4.
а тут нифига при этом он достает именно статус соответствующий max(cldate)... ... |
|||
:
Нравится:
Не нравится:
|
|||
30.11.2010, 14:55 |
|
Аналог keep(dense_rank
|
|||
---|---|---|---|
#18+
Dmitry ArefievТропотоногОсталось узнать как обстоят дела в лайт со строковыми функциями :) Если нужной нет, то ее можно создать и зарегистрировать в SQLite. Кстати, можно создать свои собственные агрегатные функции. о, как? ... |
|||
:
Нравится:
Не нравится:
|
|||
01.12.2010, 13:35 |
|
Аналог keep(dense_rank
|
|||
---|---|---|---|
#18+
http://www.sqlite.org/c3ref/create_function.html авторThe seventh, eighth and ninth parameters, xFunc, xStep and xFinal, are pointers to C-language functions that implement the SQL function or aggregate. A scalar SQL function requires an implementation of the xFunc callback only; NULL pointers must be passed as the xStep and xFinal parameters. An aggregate SQL function requires an implementation of xStep and xFinal and NULL pointer must be passed for xFunc. To delete an existing SQL function or aggregate, pass NULL poiners for all three function callbacks. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.12.2010, 13:41 |
|
Аналог keep(dense_rank
|
|||
---|---|---|---|
#18+
Dmitry Arefiev http://www.sqlite.org/c3ref/create_function.html авторThe seventh, eighth and ninth parameters, xFunc, xStep and xFinal, are pointers to C-language functions that implement the SQL function or aggregate. A scalar SQL function requires an implementation of the xFunc callback only; NULL pointers must be passed as the xStep and xFinal parameters. An aggregate SQL function requires an implementation of xStep and xFinal and NULL pointer must be passed for xFunc. To delete an existing SQL function or aggregate, pass NULL poiners for all three function callbacks. С агрегатными функциями дело интересно обстоит - апстримом эскулайта разрабатывается биндинг tclsqlite, но в нем агрегаты создавать нельзя, хотя многие другие биндинги умеют. Позиция апстрима следующая - не надо вам агрегаты создавать. Когда-то я думал добавить сабж, а потом решил, что и в самом деле не надо... ... |
|||
:
Нравится:
Не нравится:
|
|||
02.12.2010, 23:51 |
|
Аналог keep(dense_rank
|
|||
---|---|---|---|
#18+
ТропотоногПо ходу дела выяснилось, что в лайт работает и такой вот запрос Код: plaintext 1. 2. 3. 4.
а тут нифига при этом он достает именно статус соответствующий max(cldate)... Ошибаетесь. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15.
В первой строке результатов последнего запроса, как видите, c=3, а не c=1, как вы ожидаете. Вопрос "а почему оно работает и не надо ли убрать для совместимости" периодически задается в рассылке sqlite-users :-) И я сам придерживаюсь взгляда, что эта возможность необходима, примеры, где именно, в рассылку присылал. Вкратце - можно эмулировать отсутствующую конструкцию "distinct on" (для совместимости с постгресом, в частности). Но только осторожно, т.к. временами можно встать на грабли, особенно при смене версии эскулайт. Вот в качестве примера грабли, на которые я сам не очень давно встал: http://www.mail-archive.com/sqlite-users@sqlite.org/msg56103.html]http://www.mail-archive.com/sqlite-users@sqlite.org/msg56103.html Проблему можно обойти с помощью сортированного подзапроса, но без сильной на то необходимости лучше придерживаться рекомендованных путей: http://www.mail-archive.com/sqlite-users@sqlite.org/msg56114.html]http://www.mail-archive.com/sqlite-users@sqlite.org/msg56114.html ... |
|||
:
Нравится:
Не нравится:
|
|||
03.12.2010, 00:12 |
|
|
start [/forum/topic.php?fid=54&gotonew=1&tid=2009263]: |
0ms |
get settings: |
10ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
48ms |
get topic data: |
14ms |
get first new msg: |
9ms |
get forum data: |
3ms |
get page messages: |
59ms |
get tp. blocked users: |
2ms |
others: | 312ms |
total: | 480ms |
0 / 0 |