powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Сложный запрос
14 сообщений из 14, страница 1 из 1
Сложный запрос
    #32474471
Евгений.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Имеем:
История изменения курса валют (валюта, курс).
Валют несколько (EUR, USD, KGZ...).

Требуется:
Получить средний курс по трем последним записям для каждой валюты.

Возможно ли сделать это на сиквеле?
...
Рейтинг: 0 / 0
Сложный запрос
    #32474476
Фотография АлексейК
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Возможно ли сделать это на сиквеле?
Возможно. Достаточно легко
...
Рейтинг: 0 / 0
Сложный запрос
    #32474507
Евгений.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ну просто камень с души свалился! =)

А как напиример?
...
Рейтинг: 0 / 0
Сложный запрос
    #32474519
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
select avg(mid), valyuta from
(
select max(id) as mid, valyuta from mytable group by valyuta
    union all
select max(id), valyuta from mytable group by valyuta
where
id not in (select max(id) from mytable group by valyuta)
    union all
select max(id), valyuta from mytable group by valyuta
where
id not in (select max(id) from mytable group by valyuta)
and
id not in (select max(id) from mytable group by valyuta
where id not in (select max(id) from mytable group by valyuta))
)
group by valyuta
...
Рейтинг: 0 / 0
Сложный запрос
    #32474573
Фотография Geo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Или
select [Валюта], avg([Курс]) from [КурсыВалют]
where [идЗаписи] in (select top 3 [идЗаписи] from [КурсыВалют] order by [идЗаписи] desc)
group by [Валюта]

Эх, когда же завтрешний (или завтряшний?.. завтришний.. Пятничный, в общем) вечер наступит што-ли?
...
Рейтинг: 0 / 0
Сложный запрос
    #32474574
Фотография Geo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Т.е.

select [Валюта], avg([Курс]) as a from [КурсыВалют] as [курс]
where [идЗаписи] in (select top 3 [идЗаписи] from [КурсыВалют] where [КурсыВалют].[Валюта]=[курс].[Валюта] order by [идЗаписи] desc)
group by [Валюта]
...
Рейтинг: 0 / 0
Сложный запрос
    #32474578
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
2 Geo:
Твой вариант намного лучше. Только скажи мне - оно действительно так работает? Можно писать TOP 3, чтобы оно выдавало не всего 3, а по 3 на каждое значение некоторого поля?
...
Рейтинг: 0 / 0
Сложный запрос
    #32474584
Фотография Geo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BC> Можно писать TOP 3, чтобы оно выдавало не всего 3, а по 3 на каждое значение некоторого поля?
Ага. Только первый мой вариант (неправильный) будет выдавать именно всего 3, а второй - по 3 на каждое значение.
...
Рейтинг: 0 / 0
Сложный запрос
    #32474588
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Понял, спасибо. Буду знать. Великая вещь.
...
Рейтинг: 0 / 0
Сложный запрос
    #32474643
(c)VIG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Саныч, похоже у тебя проблемы с коррелированными запросами. Наверное перепраздновал .А в принципе решение похожих задач достаточно часто встречалось на форуме, например\r
/topic/60176&pg=1#428134\r
или /topic/28485&pg=2#335477
...
Рейтинг: 0 / 0
Сложный запрос
    #32478835
Евгений.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Красивый запрос.
Только [идЗаписи] в таблице нет =(
Есть [Дата] но она без времени и за день может быть 5 разных записей.
Даже если не думать о ТОП 3, то как преобразовать связь "where [идЗаписи] in (...)" без [идЗаписи]?
...
Рейтинг: 0 / 0
Сложный запрос
    #32478898
Фотография paparome
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А как у вас определяется - какие записи и есть последние 3?
Какие условия сортировки?
И (пардон) уникальности?

про уникальность:
5 записей в день по одной валюте
Дата Вал Курс
13.04.2004 EUR 34.58
13.04.2004 EUR 34.57
13.04.2004 EUR 34.58
13.04.2004 EUR 34.59
13.04.2004 EUR 34.58

Как отличить записи 1, 3 и 5?
...
Рейтинг: 0 / 0
Сложный запрос
    #32478930
Можно еще
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Для конкретной:
Код: plaintext
1.
2.
3.
4.
SELECT Avg(q.k) AS AvK
FROM [SELECT SUM1 as k
FROM VHIST AS h
WHERE CODE= 1 
ORDER BY DATK DESC , Rnd(DATK) DESC]. AS q;


Rnd - если нет уникального индекса по (CODE,DATK).

Для каждой:
Код: plaintext
1.
2.
3.
4.
SELECT Avg(q.k) AS AvK, CODE 
FROM [SELECT SUM1  as k, CODE
FROM VHIST AS h
ORDER BY DATK DESC , Rnd(DATK) DESC]. AS q
GROUP BY CODE;


для Ac>97 наверное можно без [ ].

если есть уникальный индекс по дате+валюте - перепишите In в предложениях Гео или ВС на WHERE EXISTS ..., причем работать будет быстрее чем с In, а "недокументированный" синтаксис (97) не понадобится.
...
Рейтинг: 0 / 0
Сложный запрос
    #32478995
наврал
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
наврал. (забыл, зачем делалось) для конкретной можно и так, только Top 3 во внутреннем добавить. Для всех к сожалению низя. (см. в сторону EXISTS)
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Сложный запрос
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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