Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Выборка из нескольких таблиц с группировкой 
V
    Опции темы
Акимыч
Дата 11.11.2008, 17:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 41
Регистрация: 4.6.2006
Где: Владимир

Репутация: 1
Всего: 1



Коллеги, выручайте! Уже почти вынес мозг о клаву...  smile 
Имеются таблицы (названия условны и структура круто сокращена):
TAL:
Код

fam nvarchar(30)
im nvarchar(30)
ot nvarchar(30)
dr smalldatetime
d_pos_max smalldatetime


MOVE:
Код

fam nvarchar(30)
im nvarchar(30)
ot nvarchar(30)
dr smalldatetime
d_vip_max smalldatetime


База в MS SQL доступ ADO.

В программе при открытии формы требуется в label написать дату последнего (максимального) посещения (d_pos_max или d_vip_max) из обеих таблиц, ну смотря где она больше, для конкретного человека с ФИО и датой раждения!

Щас временно сделал через ХП. В ней из обеих таблиц данные выбирается во временную:
Код

CREATE PROCEDURE SP_LASTVISIT
    @FAM NVARCHAR(30),
    @IM NVARCHAR(30),
    @OT NVARCHAR(30),
    @DR SMALLDATETIME,
    @DATE SMALLDATETIME OUTPUT
AS
SELECT FAM,IM,OT,DR,MAX(D_POS_MAX) AS D_POS INTO #LASTVISIT FROM MEDBASE..VIEW_TALONS WHERE FAM=@FAM AND IM=@IM AND OT=@OT AND DR=@DR GROUP BY FAM,IM,OT,DR
INSERT INTO #LASTVISIT SELECT FAM,IM,OT,DR,MAX(D_VIP_MAX) AS D_POS FROM MEDBASE..VIEW_KARTA INNER JOIN MEDBASE..VIEW_KARTA_INFO ON MEDBASE..VIEW_KARTA.ID_KARTA=MEDBASE..VIEW_KARTA_INFO.ID_KARTA WHERE FAM=@FAM AND IM=@IM AND OT=@OT AND DR=@DR GROUP BY FAM,IM,OT,DR
SELECT DISTINCT @DATE=MAX(D_POS) FROM #LASTVISIT WHERE FAM=@FAM AND IM=@IM AND OT=@OT AND DR=@DR
GO


Т.к. счет записей в каждой выборке идет на десятки тысяч в каждый запрос воткнул WHERE.

Если есть какие-нибудь идеи, а то не хочется перелопачивать всю базу вот так вот несколькими выборками...


 smile 

ЗАРАНЕЕ СПАСИБО!
PM MAIL   Вверх
Frees
Дата 12.11.2008, 07:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2233
Регистрация: 2.12.2005
Где: Екатеринбург

Репутация: 23
Всего: 54



Цитата(Акимыч @  11.11.2008,  19:43 Найти цитируемый пост)
В программе при открытии формы требуется в label написать дату последнего (максимального) посещения (d_pos_max или d_vip_max) из обеих таблиц, ну смотря где она больше, для конкретного человека с ФИО и датой раждения!

попроБуй так (не уверен что работает писал на колене)
Код

SELECT FIRST 1
    s.fam,
    s.im ,
    s.ot,
    s.dr,
    s.d_max
FROM
    (SELECT FIRST 1
        fam,
        im ,
        ot,
        dr,
        d_vip_max
    FROM MOVE
    ORDER BY d_vip_max DESC
    UNION
    SELECT FIRST 1
        fam,
        im ,
        ot,
        dr,
        d_pos_max
    FROM TAL
    ORDER BY d_pos_max DESC)  s  (fam, im, ot, dr, d_max)
ORDER BY s.d_max DESC




Это сообщение отредактировал(а) Frees - 12.11.2008, 08:03


--------------------
Кольцов Виктор Владимирович
PM MAIL ICQ   Вверх
Акимыч
Дата 12.11.2008, 12:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 41
Регистрация: 4.6.2006
Где: Владимир

Репутация: 1
Всего: 1



Цитата(Frees @  12.11.2008,  08:52 Найти цитируемый пост)
попроБуй так 


Frees, спасибо, идея ясна, НО...
Твой запрос выберет максимальную дату из обеих таблиц и вернет максимальную из них. 
Цитата(Акимыч @  11.11.2008, 18:43 Найти цитируемый пост)

для конкретного человека с ФИО и датой раждения!

А как? Опять поставить условия в каждый запрос, или...

Но есть ли какой вариант делать это совсем просто, и может не через ХП а еще как? Не знаю как лучше и быстрее... Может я не вижу чего...

Кстати, прога на делфях, база на SQL Server'e (ну это я уже писал), а вот данные для этой выборки вообще в другой базе, но на том же сервере...  smile 

Это сообщение отредактировал(а) Акимыч - 12.11.2008, 12:33
PM MAIL   Вверх
Frees
Дата 12.11.2008, 13:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2233
Регистрация: 2.12.2005
Где: Екатеринбург

Репутация: 23
Всего: 54



Цитата(Акимыч @  12.11.2008,  14:12 Найти цитируемый пост)
А как? Опять поставить условия в каждый запрос, или...

а в чем проБлема в каждый подзапрос вписать условие


--------------------
Кольцов Виктор Владимирович
PM MAIL ICQ   Вверх
Акимыч
Дата 13.11.2008, 12:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 41
Регистрация: 4.6.2006
Где: Владимир

Репутация: 1
Всего: 1



Frees, пасиба за помощь!!!! Выборка реально ГОРАЗДО меньше и работает быстрее!  smile 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Базы данных и репортинг"
Vit
Петрович

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами


Обязательно указание:

1. Базы данных (Paradox, Oracle и т.п.)

2. Способа доступа (ADO, BDE и т.д.)


  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • Вопросы по SQL и вопросы по базам данных не связанные с Дельфи задавать здесь

FAQ раздела лежит здесь!


Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Базы данных и репортинг | Следующая тема »


 




[ Время генерации скрипта: 0.1704 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.