Я пытался решить эту проблему сейчас в течение нескольких дней. У меня есть таблица с именем Stat со следующей упрощенной структурой и выборки данных:Выбор номеров счетов с последней датой
Customer BankID AccNumb Type Date Amount AccType
Customer 1 Boa 5 Account Statement 2015-01-01 10000,00 Eur
Customer 1 CS 10 Account Statement 2015-04-04 22000,00 Eur
Customer 2 Sa 15 Account Statement 2015-03-13 3000,00 Eur
Customer 2 Sa 40 Account Statement 2015-04-24 1000,00 Eur
Customer 2 Sa 15 Sale Advice 2015-04-16 400,00 Eur
Customer 2 Sa 15 Account Statement 2015-12-24 50,00 Usd
Customer 2 Boa 20 Sale Advice 2015-05-15 6000,00 Eur
Customer 3 Cu 25 Account Statement 2015-11-27 81000,00 Eur
Customer 3 Cu 30 Sale Advice 2015-11-27 3000,00 Usd
Customer 3 Pop 30 Account Statement 2015-11-27 12000,00 Eur
Что я пытаюсь сделать, это выбрать ACCOUNTNUMBER с последней указанной даты. Клиент может также иметь разные номера счетов в разных банках, поэтому его также следует группировать BankID и Customer.
Я пришел далеко:
SELECT AccNumb, Customer, BankID,
(SELECT TOP 1 Amount FROM Stat
WHERE AccNumb = y.AccNumb AND Customer = y.Customer AND
BankID = y.BankID AND Type = 'Account Statement' AND
Date = MAX(y.Date) GROUP BY Amount) Amount
FROM Stat y
GROUP BY AccNumb, Customer, BankID
ORDER BY Customer, AccNumb
И это прекрасно работает, проблема в том, что я должен также добавить AccType столбца и дату мне удалось сделать это с более 2 подзапросы (запрос занимает много времени, но оно работает).
Но теперь у меня есть проблема, что в столбце Customer (или Date) есть значения NULL. Теперь номер учетной записи этих «NULL» клиентов по-прежнему должен отображаться, если это последняя дата. Я также попытался сделать то же самое, присоединившись к таблице сам по себе, и это не сработало.
SELECT x.AccNumber, x.Customer, x.BankID, x.Date, y.Amount, y.AccType
FROM Stat y RIGHT JOIN
(SELECT AccNumber, Customer, BankID, MAX(Date) Date FROM Stat
GROUP BY AccNumber, Customer, BankID) x
ON x.AccNumber = y.AccNumber AND
x.Customer = y.Customer AND
x.BankID = y.BankID AND
x.Date = y.Date
ORDER BY y.Customer, y.AccNumber
Но теперь клиенты в «NULL» имеют только NULL значения в сумме, дате и AccType Столбцы, которая не является правильным.
Выход должен быть чем-то вроде этого
AccNumb Customer BankID Amount Date AccType
111111111 a Boa 1234.40 31.06.2014 Eur
222222222 NULL Boa 5678.40 31.04.2014 Eur
333333333 b Boa 0.00 25.02.2014 Eur
444444444 NULL Boa 9101.40 23.04.2015 Eur
555555555 NULL Boa 1213.40 31.02.2014 Usd
A66666666 c Sa NULL 31.02.2014 Eur
777777777 c Sa 1415.00 31.12.2014 Eur
888888888 c Boa 1617.40 31.12.2014 Usd
999999999 f Pop 5678.64 31.10.2014 Eur
Спасибо заранее.
wow! это похоже на работу (с разделением по accnumb также), единственная проблема заключается в том, что я получаю дубликат AccountNumber для клиентов, имеющих также «NULL» в качестве имени клиента – Mance
Мне пришлось разделить на bankId и Accnumb только :-) теперь отлично работает – Mance