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

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

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

А как напиример?
...
Рейтинг: 0 / 0
08.04.2004, 21:02
    #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
08.04.2004, 23:08
    #32474573
Geo
Geo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сложный запрос
Или
select [Валюта], avg([Курс]) from [КурсыВалют]
where [идЗаписи] in (select top 3 [идЗаписи] from [КурсыВалют] order by [идЗаписи] desc)
group by [Валюта]

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

select [Валюта], avg([Курс]) as a from [КурсыВалют] as [курс]
where [идЗаписи] in (select top 3 [идЗаписи] from [КурсыВалют] where [КурсыВалют].[Валюта]=[курс].[Валюта] order by [идЗаписи] desc)
group by [Валюта]
...
Рейтинг: 0 / 0
08.04.2004, 23:24
    #32474578
Владимир Саныч
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сложный запрос
2 Geo:
Твой вариант намного лучше. Только скажи мне - оно действительно так работает? Можно писать TOP 3, чтобы оно выдавало не всего 3, а по 3 на каждое значение некоторого поля?
...
Рейтинг: 0 / 0
08.04.2004, 23:31
    #32474584
Geo
Geo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сложный запрос
BC> Можно писать TOP 3, чтобы оно выдавало не всего 3, а по 3 на каждое значение некоторого поля?
Ага. Только первый мой вариант (неправильный) будет выдавать именно всего 3, а второй - по 3 на каждое значение.
...
Рейтинг: 0 / 0
08.04.2004, 23:34
    #32474588
Владимир Саныч
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сложный запрос
Понял, спасибо. Буду знать. Великая вещь.
...
Рейтинг: 0 / 0
09.04.2004, 01:43
    #32474643
(c)VIG
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сложный запрос
Саныч, похоже у тебя проблемы с коррелированными запросами. Наверное перепраздновал .А в принципе решение похожих задач достаточно часто встречалось на форуме, например\r
/topic/60176&pg=1#428134\r
или /topic/28485&pg=2#335477
...
Рейтинг: 0 / 0
13.04.2004, 12:17
    #32478835
Евгений.
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сложный запрос
Красивый запрос.
Только [идЗаписи] в таблице нет =(
Есть [Дата] но она без времени и за день может быть 5 разных записей.
Даже если не думать о ТОП 3, то как преобразовать связь "where [идЗаписи] in (...)" без [идЗаписи]?
...
Рейтинг: 0 / 0
13.04.2004, 12:44
    #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
13.04.2004, 12:55
    #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
13.04.2004, 13:15
    #32478995
наврал
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сложный запрос
наврал. (забыл, зачем делалось) для конкретной можно и так, только Top 3 во внутреннем добавить. Для всех к сожалению низя. (см. в сторону EXISTS)
...
Рейтинг: 0 / 0
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Сложный запрос / 14 сообщений из 14, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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