У меня есть результирующий набор запланированных транзакций (запланированная дата и запланированная сумма), соединенных с списком фактической транзакции (Фактическая дата и фактическая сумма), которая была сделана.Множественная сгруппированная информация в одном запросе
Я подаю иск на SQL Azure.
Что мне нужно, чтобы получить это, для каждого schedule_id, мне нужно знать:
Последняя дата была сделана выплата (Так, MAX Фактическая дата) для расписания.
Соответствующая сумма этого платежа (Таким образом, фактическая сумма на дату найденной выше)
Идентификатор оплаты последнего платежа (Actual_transaction_id).
Следующая дата оплаты за график с (Таким образом, MIN scheduled_date где фактическая дата IS NULL)
Сумма очередного платежа, расположенной выше.
Вот код для создания тестовых данных:
SET DATEFORMAT DMY
DECLARE @tbl TABLE
(
schedule_id INT NOT NULL,
scheduled_date DATE NOT NULL,
actual_date DATE NULL,
scheduled_amount DECIMAL(16,2) NOT NULL,
actual_amount DECIMAL(18,2) NULL,
actual_tranaction_id INT NULL
)
INSERT INTO @tbl
SELECT 77, '2014-06-17', '2014-06-17',292.18, 292.18 ,1 UNION
SELECT 77, '2014-07-17', '2014-07-17',292.18, 292.18 ,2 UNION
SELECT 77, '2014-08-17', '2014-08-17',292.18, 292.18 ,3 UNION
SELECT 77, '2014-09-17', '2014-09-17',292.18, 292.18 ,4 UNION
SELECT 77, '2014-10-17', '2014-10-17',292.18, 292.18 ,5 UNION
SELECT 77, '2014-11-17', '2014-11-17',292.18, 292.18 ,6 UNION
SELECT 77, '2015-02-17', '2015-02-18',504.00, 504.00 ,7 UNION
SELECT 77, '2015-03-17', NULL,504.00, NULL, NULL UNION
SELECT 77, '2015-04-17', NULL,504.00, NULL, NULL UNION
SELECT 77, '2015-05-17', NULL,504.00, NULL, NULL UNION
SELECT 77, '2015-06-17', NULL,504.00, NULL, NULL UNION
SELECT 77, '2015-07-17', NULL,504.00, NULL, NULL UNION
SELECT 77, '2015-08-17', NULL,504.00, NULL, NULL UNION
SELECT 77, '2015-09-17', NULL,504.00, NULL, NULL UNION
SELECT 77, '2015-10-17', NULL,504.00, NULL, NULL UNION
SELECT 77, '2015-11-17', NULL,504.00, NULL, NULL UNION
SELECT 77, '2015-12-17', NULL,504.00, NULL, NULL UNION
SELECT 92, '2014-06-17', '2014-06-17',700.00, 700.00,10 UNION
SELECT 92, '2014-07-17', '2014-07-17',550.00, 700.00, 11 UNION
SELECT 92, '2014-08-17', '2014-08-17',700.00, 700.00, 12 UNION
SELECT 92, '2014-09-17', '2014-09-17',700.00, 700.00, 13 UNION
SELECT 92, '2014-10-17', '2014-10-16',620.00, 580.00, 14 UNION
SELECT 92, '2014-11-17', '2014-11-14',600.00, 601.00, 15 UNION
SELECT 92, '2014-12-17', '2014-12-17',700.00, 702.00, 16 UNION
SELECT 92, '2015-01-17', '2015-01-17',850.00, 851.00, 17 UNION
SELECT 92, '2015-02-17', '2015-02-17',850.00, 853.00, 18 UNION
SELECT 92, '2015-03-17', NULL,850.00, NULL, NULL UNION
SELECT 92, '2015-04-17', NULL,850.00, NULL, NULL UNION
SELECT 92, '2015-05-17', NULL,850.00, NULL, NULL UNION
SELECT 92, '2015-06-17', NULL,850.00, NULL, NULL UNION
SELECT 92, '2015-07-17', NULL,850.00, NULL, NULL UNION
SELECT 92, '2015-08-17', NULL,850.00, NULL, NULL UNION
SELECT 92, '2015-09-17', NULL,850.00, NULL, NULL UNION
SELECT 92, '2015-10-17', NULL,850.00, NULL, NULL UNION
SELECT 92, '2015-11-17', NULL,850.00, NULL, NULL UNION
SELECT 92, '2015-12-17', NULL,850.00, NULL, NULL UNION
SELECT 92, '2016-01-17', NULL,850.00, NULL, NULL UNION
SELECT 92, '2016-02-17', NULL,850.00, NULL, NULL UNION
SELECT 92, '2016-03-17', NULL,850.00, NULL, NULL
SELECT * FROM @tbl
и ожидаемый результат будет, в этом случае, два ряда:
scheduleId, lastPaymentDate, lastPaymentAmount, nextPaymentDate, nextPaymentAmount
77, 2015-02-18, 504.00, 2015-03-17, 504.00
92, 2015-02-17, 853.00, 2015-03-17, 850.00
Является ли это вообще возможно, чтобы как-то сделать это в эффективном одном запросе? Или это нужно разбить на несколько запросов с собственным ГДЕ и группировкой?
Это прибило его! Благодаря @JamesZ – Craig