2016-01-28 3 views
0

Мне нужно отображать данные из трех таблиц, в которых отображаются только ограниченные связанные данные.Группировка/ограничение результатов с использованием нескольких таблиц

примеры Таблица -
Клиенты: CUSTOMERNAME, CustomerID
Accounts: AccountName, AccountID, CustomerID
Сделки: TransactionAmount, TransactionDate, TransactionID, ACCOUNTID, CustomerID

Клиенты могут не иметь никаких связанных учетных записей, но может имеют несколько. У учетных записей могут быть не связанные транзакции, но они могут иметь несколько.

Есть два обязательные способ отображения данных:

  1. Топ 200 сделок по TransactionDate, но только один на счет (самый последний TransactionDate). Отобразить имя клиента, имя учетной записи, транзакционный учет.

  2. Результат поиска Пользовательское имя или имя_пользователя или транзакционный идентификатор.
    a. Если поиск осуществляется по CustomerName, отобразите CustomerName, AccountName с наивысшим идентификатором учетной записи, плюс связанный TransactionAmount, используя только самый последний TransactionDate. Для Клиента не может быть никаких Счетов или Сделок.
    b. Если поиск осуществляется по имени AccountName, отобразите CustomerName, AccountName и соответствующий TransactionAmount, используя только самый последний TransactionDate. Для Клиента не может быть никаких Сделок.
    c. При поиске по TransactionID отобразите CustomerName, AccountName и TransactionAmount. (Это один очень просто)

У меня возникают проблемы, выяснить, как сделать группировки и другие агрегатные функции, необходимые для ограничения данных, по мере необходимости. Любая помощь была бы чрезвычайно оценена.

+0

Что SQL вы создали до сих пор, и какие результаты вы получили? – PKatona

ответ

0

1) ограничить сделки с последними из них, вы можете сделать что-то вроде

with LatestTransactionByAccount as (
    select * from Transactions t 
    where not exists (
    select 1 from Transactions t2 where t2.AccountID = t.AccountID 
    and t2.TransactionDate < t.TransactionDate) 
) 
select ... 
from LatestTransactionByAccount 
join ... 

2) работает аналогично

Смежные вопросы