Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.04.2009, 14:57   #1
span4
Пользователь
 
Регистрация: 04.04.2009
Сообщений: 33
По умолчанию надо сделать выборку

есть таблица valuta(num int, name varchar(100), dat datetime, znach float)

надо выбрать последнее значение котировок валют в формате num, name, znach...

думаю надо использовать select
span4 вне форума Ответить с цитированием
Старый 04.04.2009, 15:31   #2
Антон Ю.Б.
Форумчанин
 
Регистрация: 03.01.2009
Сообщений: 116
По умолчанию

Зависит от СУБД. Может быть select first 1 <список полей> from <table> order by <поле> desc. Или что-то похожее. А если в СУБД ничего вообще не предусмотрено, то select <список полей> from <table> order by <поле> desc, а в наборе данных (Table, DataSet), куда это получите, просто спозиционироваться <набор>.First и брать то, что надо <набор>.FieldByName(<поле>).As<ти п>
Антон Ю.Б. вне форума Ответить с цитированием
Старый 04.04.2009, 15:59   #3
span4
Пользователь
 
Регистрация: 04.04.2009
Сообщений: 33
По умолчанию

а если в таблице хранятся все моменты, когда менялись котеровки?(т.е. в один день может бытьнесколько записей, или вообще может не быть).. наверное сортировку надо делать еще.. по дате и времени..
span4 вне форума Ответить с цитированием
Старый 05.04.2009, 00:31   #4
soleil@mmc
SQL-коддинг
Участник клуба
 
Регистрация: 16.01.2009
Сообщений: 1,192
По умолчанию

ну вроде как
Код:
order by <поле> desc
и подразумевает сортировку, например, по дате/времени
soleil@mmc вне форума Ответить с цитированием
Старый 05.04.2009, 12:02   #5
span4
Пользователь
 
Регистрация: 04.04.2009
Сообщений: 33
По умолчанию

получается так:

Код:
select num, name, znach from valuta order by dat desc
теперь только надо сделать ограничение на вывод.. чтобы он выводил только по одному значению катировки каждой валюты.. потому что так вроде получается что, выведет num, name, znach + отсортироет по дате...

может надо использовать where со сравнением даты-времени?
span4 вне форума Ответить с цитированием
Старый 05.04.2009, 15:52   #6
soleil@mmc
SQL-коддинг
Участник клуба
 
Регистрация: 16.01.2009
Сообщений: 1,192
По умолчанию

писали же уже - если нет возможности в вашем диалекте СКЛ юзать "select first 1", то фетчите данные запроса и берите только первую строчку
всем было бы легче отвечать на ваши вопросы скажи вы в чем реализуются запросы: мускл, ибазе, оракл????

например, в ибазе никто не мешает написать процедуру, которая вернет курсор с одной записью

Цитата:
Сообщение от span4 Посмотреть сообщение
получается так:
может надо использовать where со сравнением даты-времени?
а это можно юзать только если есть гарантия, что финальный курс будет единственным и выставлен, например, после 19-00

апдейт
торможу чота
можно же таким запросом зафигачить
Код:
select 
    num, 
    name, 
    znach 
from valuta 
where 0=0
  and dat = (select max(dat) 
                  from valuta)
и не забыть повесить необходимые индексы на таблицы, чтобы потом лишних тромозов на запросах не появилось

Последний раз редактировалось soleil@mmc; 05.04.2009 в 16:01.
soleil@mmc вне форума Ответить с цитированием
Старый 05.04.2009, 16:09   #7
span4
Пользователь
 
Регистрация: 04.04.2009
Сообщений: 33
По умолчанию

в ибазе..

а для чего писать 0=0?? если написать

select
num,
name,
znach
from valuta
where dat = (select max(dat) from valuta)

так же тоже будет выполняться?
span4 вне форума Ответить с цитированием
Старый 05.04.2009, 16:18   #8
span4
Пользователь
 
Регистрация: 04.04.2009
Сообщений: 33
По умолчанию

или при таком запросе он выведет всего одно значение котировки с последней датой??
надо чтобы выбирал значение всех котировок..
span4 вне форума Ответить с цитированием
Старый 05.04.2009, 17:09   #9
soleil@mmc
SQL-коддинг
Участник клуба
 
Регистрация: 16.01.2009
Сообщений: 1,192
По умолчанию

а вы к валюте по имени обращаетесь? оригинально грамотнее реализовать справочник валют

тогда так
Код:
select 
    num, 
    name, 
    znach 
from valuta 
where 0=0
  and dat in (select max(dat)
                  from valuta
                 group by name)
З.Ы.: 0=0 позволяет при разработке каментить отдельные условия и не терять при этом в читабельности + стандартная загулшка для подставляемого макроса (считай, что это заранее обговоренные правила оформления кода там где я этим занимаюсь)
soleil@mmc вне форума Ответить с цитированием
Старый 05.04.2009, 17:20   #10
span4
Пользователь
 
Регистрация: 04.04.2009
Сообщений: 33
По умолчанию

не, не по имени, так просто удобней тут объеснять )) в коде конечно по другому )))
span4 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как правильно сделать выборку Minotavr_x86 БД в Delphi 9 04.03.2009 19:56
Помогите сделать задчку, очень надо... Horknee Паскаль, Turbo Pascal, PascalABC.NET 0 04.12.2008 12:46
Не могу сделать выборку с нужными полями, помогите чайнику! kadet.rus Microsoft Office Access 2 26.04.2008 14:12
Помогите сделать выборку! Adm Microsoft Office Access 1 06.02.2008 19:10