Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Базы данных
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 01.10.2010, 22:59
chin84galaxy chin84galaxy вне форума
Прохожий
 
Регистрация: 21.05.2009
Сообщения: 2
Репутация: 10
Радость Sql запрос что то не получается

Даны несколько таблиц к примеру "абоненты", "улицы" и "данные". В таблице "данные" есть данные абонентов (у каждого аб. несколько данных). Как сделать запрос чтобы из табл "данные" вытаскивал посл данные абонента? у меня чето не получается. Если кто может написать к примеру запрос. Заранее блогодарен!
Ответить с цитированием
  #2  
Старый 02.10.2010, 01:08
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,035
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

ну, нужно некоторое поле, по которому можно определить, что это последние данные. тогда можно сказать запросу что-то типа Top 1 и отсортировать эти данные в нужном порядке. Или использовать max по тому же полю.
Ответить с цитированием
  #3  
Старый 02.10.2010, 01:20
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,721
Репутация: 52347
По умолчанию

Как уже сказали необходимо поле котороя является критерием "старости" данных. Таковым может являтся например ДатаСоздания записи (CreateDate), или поле-счетчик таблицы (ID).
Для первого варианта запрос будет примерно такой:
Код:
select Top 1 * from Data where Data.AbonentID = :AbonentID
order by Data.CreateDate Desc
Для второго варианта почти так-же:
Код:
select Top 1 * from Data where Data.AbonentID = :AbonentID
order by Data.ID Desc
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #4  
Старый 02.10.2010, 12:59
Аватар для Uniq!
Uniq! Uniq! вне форума
Местный
 
Регистрация: 29.09.2010
Сообщения: 539
Версия Delphi: Delphi XE3
Репутация: 374
По умолчанию

Надо мне кажеться тему прилепить.
SQL запрос на просчёт "уникальных" полей в уже отфильтрованном списке.

Код:
ZQuery1.Close;
ZQuery1.SQL.Clear;
ZQuery1.SQL.Add('Select * FROM '+db_main+'');
ZQuery1.SQL.Add('WHERE Realisation_Date LIKE ''%.'+09.2010');
ZQuery1.SQL.Add('AND Warehouse = ''МР''');
ZQuery1.Open;

После этого получаю таблицу первая колонка которой:
Article:
__________
АААА0001
АААА0002
АААА0003
АААА0004
ББББ0001
ББББ0002
ББББ0003
СССС0001

АААА,ББББ,СССС - уникальны, т.е. ответ в результате "3" должен получиться

Что надо добавить?
Ответить с цитированием
  #5  
Старый 02.10.2010, 13:36
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,721
Репутация: 52347
По умолчанию

Примерно так я это вижу:
Код:
select Count(Left(CodeField,4)) from Table group by Left(CodeField,4)
Только вместо функции Left, которая возвращает N-символов с начала строки, используйте функцию подходящую под ваш диалект SQL.
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #6  
Старый 02.10.2010, 13:37
Аватар для Uniq!
Uniq! Uniq! вне форума
Местный
 
Регистрация: 29.09.2010
Сообщения: 539
Версия Delphi: Delphi XE3
Репутация: 374
По умолчанию

SELECT DISTINCT LEFT(Article,4) as Article FROM db_main
Да да да)))
Спасибо.
Теперь осталось разобраться как это всё совместить
Ответить с цитированием
  #7  
Старый 02.10.2010, 21:45
Аватар для Uniq!
Uniq! Uniq! вне форума
Местный
 
Регистрация: 29.09.2010
Сообщения: 539
Версия Delphi: Delphi XE3
Репутация: 374
По умолчанию

Код:
Article              Product Weight  SP        PP_p1g  PP       Profit
МРБУ0024	Кольцо	6,94	2221	1100	1100	5413
МРБУ0028	Серьги	5,56	1779	1100	1100	4337
МРБУ0092	Кольцо	1,46	561	799	799	606
МРБУ0104	Цепь	4,58	2093	799	799	1566
МРБУ0106	Цепь	5,49	5	80	80	434
МРБУ0114	Серьги	7,33	2925	799	799	2932
МРБУ0115	Серьги	5,17	1225	799	799	2906

как оформить суммирование по нескольким полям сразу?

т.е. чтобы в результате запроса получилось что то вроде
Код:
Weight  SP        PP       Profit
21,56    123123  2342   123123
Ответить с цитированием
  #8  
Старый 03.10.2010, 01:32
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,721
Репутация: 52347
По умолчанию

Тогда возможно так устроит:
Код:
select sum(Weigth) as Weigth,sum(SP) as SP,sum(PP) as PP,sum(Profit) as Profit from db_main
Ну а если еще и группировка из прошлых примеров нужна допустим по Product то будет примерно так:
Код:
select Product, sum(Weigth) as Weigth,sum(SP) as SP,sum(PP) as PP,sum(Profit) as Profit 
from db_main
group by Product
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.

Последний раз редактировалось Страдалецъ, 03.10.2010 в 01:42.
Ответить с цитированием
  #9  
Старый 03.10.2010, 13:52
Аватар для Uniq!
Uniq! Uniq! вне форума
Местный
 
Регистрация: 29.09.2010
Сообщения: 539
Версия Delphi: Delphi XE3
Репутация: 374
По умолчанию

Как же всё просто. Я перечитал весь FAQ на sql.ru там по поводу команд через запЯтую ничего не было
Ответить с цитированием
  #10  
Старый 05.10.2010, 21:26
Аватар для Uniq!
Uniq! Uniq! вне форума
Местный
 
Регистрация: 29.09.2010
Сообщения: 539
Версия Delphi: Delphi XE3
Репутация: 374
По умолчанию

а ели групировка нужна не по целому полю а только по его части.

group by product
Даст по
Код:
 кольцо
 крест
А если надо по Article
Код:
 МРМР*
 МРБУ*

Всё понял:

Код:
MyQuery1.Close;
MyQuery1.SQL.Clear;
MyQuery1.SQL.Add('SELECT sum(weight) as Sumweight, sum(PP) as SumPP, sum(SP) as sumSP, sum(Profit) as SumProfit');
MyQuery1.SQL.Add('from (');
MyQuery1.SQL.Add('SELECT * FROM lucky_table');
MyQuery1.SQL.Add('WHERE Warehouse ='''+edRepWarehouse.Text+'''');
MyQuery1.SQL.Add('AND Realisation_Date Like ''%.'+cbRepRealisation_Date.Text+'.2010''');
MyQuery1.SQL.Add(') as aq group by Left(Article,4)');
MyQuery1.Open;

Авось кому пригодиться.

Последний раз редактировалось Uniq!, 05.10.2010 в 21:30.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 11:29.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter