powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / групповая операция
8 сообщений из 8, страница 1 из 1
групповая операция
    #32523167
failure
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
есть ли в постгресе групповая операция, аналогичная Last()/First() в MS Access?
...
Рейтинг: 0 / 0
групповая операция
    #32523489
jyj dfv yflj&
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Last()/First() в MS Access возвращает ПРОИЗВОЛЬНУЮ запись из набора (а не первую/последнюю в сортированном наборе, для чего служат подзапросы с TOP) (если вы этого не знали - посмотрите в форуме по акесу).

т.е это абсолютно ненужные операторы (кроме случаев, когда надо быстренько вернуть хоть что нибудь, ибо они работают, кажется, быстрее Max/Min)


Правда предположительно это "первая/последняя физическая запись" (что это для реляционной бд, неизвестно, тем более в случае многотабличного запроса).
...
Рейтинг: 0 / 0
групповая операция
    #32523542
jyj dfv yflj&
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
нашел:
вот там например приводили:

авторMORE INFORMATION
The Remarks section of the Help File topic, "First, Last Functions" incorrectly states that unless the query includes and ORDER BY clause, the order of records returned will be arbitrary. The correct information is that the order of records returned by the First() and Last() functions is not affected by the ORDER BY clause.
Источник:
support.microsoft.com/default.aspx?scid=kb;en-us;189391
...
Рейтинг: 0 / 0
групповая операция
    #32523579
failure
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
понятно.
тогда как мне в постгресе решить проблему с получением последней записи?
...
Рейтинг: 0 / 0
групповая операция
    #32523643
jyj dfv yflj&
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
так же (через Top), только вместо
TOP
используйте
{LIMIT and OFFSET} + {ORDER BY}
тут
LIMIT=={TOP}
OFFSET (этого в jet-SQL нет)

или напишите свой агрегат First()
используя
CREATE AGGREGATE name (
BASETYPE = input_data_type,
SFUNC = sfunc,
STYPE = state_data_type
[ , FINALFUNC = ffunc ]
[ , INITCOND = initial_condition ]
)
(и потестируйте, что быстрее)
...
Рейтинг: 0 / 0
групповая операция
    #32527342
failure
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
не получается толком.
мне надо вью создать (из базы, куда пишутся часовые данные), где будут записи, соответствующие последней записи в месяце в исходной таблице
...
Рейтинг: 0 / 0
групповая операция
    #32527650
jyj dfv yflj&
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
напишем вложенный запрос:
полагаем поле типа timestamp
и индексированным
Код: plaintext
1.
2.
3.
4.
5.
6.
SELECT MAX(adate) FROM atable WHERE adate BETWEEN (('\''||
EXTRACT(YEAR FROM dateparam) || '-' ||
 EXTRACT(MONTH FROM dateparam) ||'- 01 \'')::timestamp) 
AND
 (('\''||
EXTRACT(YEAR FROM dateparam) || '-' ||
 (EXTRACT(MONTH FROM dateparam)+1) ||'- 01 \'')::timestamp)
тогда хотя бы внутренний запрос будет считаться по индексу
и далее:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
SELECT * FROM atable AS a
WHERE adate =
(SELECT MAX(adate) FROM atable WHERE adate BETWEEN (('\''||
EXTRACT(YEAR FROM a.adate) || '-' ||
 EXTRACT(MONTH FROM a.adate) ||'- 01 \'')::timestamp) 
AND
 (('\''||
EXTRACT(YEAR FROM a.adate) || '-' ||
 (EXTRACT(MONTH FROM a.adate)+1) ||'- 01 \'')::timestamp))
лажа, но работает
а если проснуться,
то все что выше - забыть
как страшный сон
и написать:
Код: plaintext
1.
2.
3.
4.
SELECT a.* FROM atable a INNER JOIN (
SELECT MAX(adate) as madate FROM atable
GROUP BY 
EXTRACT(YEAR FROM adate),
EXTRACT(MONTH FROM adate)) q ON a.adate=q.madate
:0)
нужны ли функциональные индексы на
EXTRACT(YEAR FROM adate)
EXTRACT(MONTH FROM adate)
затрудняюсь сказать
спроси у гуру
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
групповая операция
    #35698022
Фотография _Novichok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я извиняюсь, никто не подскажет, как работае First() или Last(). Чтобы на PostgreSQL реализовать свои.
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / групповая операция
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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