Статус подзапроса SQL за определенную неделю добавлен в агрегат

Я потратил несколько часов, пытаясь решить эту проблему, и пришел к большому разочарованию, но безрезультатно. Я новичок в этом, но хочу учиться. Я использую SQLiteStudio

Данные:

  1. У меня есть таблица с данными об аренде за годы.
  2. Существует запись в неделю для клиентов, у которых есть аренда (некоторые аренды начинались и / или заканчивались в течение года, поэтому могут появляться менее 52 раз.
  3. Каждые недели данные импортируются из разных отчетов в эту таблицу и различаются по имени отчета (поле: ReportName).
  4. Клиенты могут изменить статусы с CUR (текущий) на TER (прекращение действия = уведомление за 4 недели) на FOR (бывший)
  5. У каждого клиента есть уникальный ссылочный номер аренды (поле: TenancyRef).

Мой запрос:

Итак, этот запрос работает нормально / отлично:

SELECT TenancyRef,
PropertyType,
TenancyType,
ManagementArea,
count() AS NumberEntries,
Round(Sum(Payments), 2) AS TotalPaid,
Round(Sum(HBUCAmount), 2) AS TotalHB,
Round(Sum(DebitAmount), 2) AS DebitTotal,
Round(Round(Sum(DebitAmount), 2) - Round(Sum(HBUCAmount), 2), 2) AS mySubtraction
FROM PSEData15
WHERE PropertyType != "LOCK" AND
PropertyType != "GP"
GROUP BY TenancyRef
HAVING TotalPaid = 0 AND
DebitTotal > TotalHB
ORDER BY TenancyRef DESC

Он дает мне список из почти 900 отзывов, за которые эти клиенты заплатили 0 фунтов стерлингов.

Если я запущу этот запрос отдельно:

SELECT TenancyRef, Status, ClosingBal
FROM PSEData15
WHERE (ReportName = "PSE-W201552030416" OR ReportName = "PSE-F201552030416") AND
Status != "FOR" AND
PropertyType != "LOCK" AND
PropertyType != "GP" AND
ClosingBal > 0

Он дает мне всех текущих клиентов за последнюю неделю и их конечный баланс (3667 из них)

Цель:

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

Edit1:

Меня попросили предоставить образцы данных и желаемый результат. Упрощая таблицу, мой образец будет:

TenancyRef | Status | Payments | Closing Bal | ReportName
1          | CUR    | 0.00     | 10.00       | 2015-Wk49
1          | CUR    | 0.00     | 20.00       | 2015-Wk50
1          | CUR    | 0.00     | 30.00       | 2015-Wk51
1          | CUR    | 0.00     | 40.00       | 2015-Wk52
2          | CUR    | 10.00    | 20.00       | 2015-Wk49
2          | CUR    | 10.00    | 20.00       | 2015-Wk50
2          | TER    | 10.00    | 20.00       | 2015-Wk51
2          | FOR    | 10.00    | 20.00       | 2015-Wk52
3          | CUR    | 10.00    | 20.00       | 2015-Wk49
3          | TER    | 10.00    | 20.00       | 2015-Wk50
3          | FOR    | 10.00    | 20.00       | 2015-Wk51

Желаемый результат:

TenancyRef | Count  | TotalPaid | Wk52_ClosingBal | Wk52_status
1          | 4      | 0.00      | 40.00           | CUR
2          | 4      | 40.00     | 20.00           | FOR
3          | 3      | 30.00     | 20.00           | FOR

person Mark    schedule 15.05.2016    source источник
comment
Покажите несколько примеров данных и желаемый результат.   -  person CL.    schedule 16.05.2016
comment
Спасибо, CL. Я сделал, как вы просили, надеюсь, теперь мой вопрос становится более ясным!   -  person Mark    schedule 16.05.2016
comment
У всех есть статус отчета Wk52? В вашем примере арендатор № 3 этого не делает.   -  person Kyle Hale    schedule 16.05.2016


Ответы (1)


Если у всех есть строка отчета Week52, это довольно просто, просто добавьте

max(case when reportname = '2015-Wk52' then ClosingBal else null end) as Week52ClosingBal,
max(case when reportname = '2015-Wk52' then Status else null end) as Week52Status

на ваш первый запрос.

Если, с другой стороны, вам необходимо определить последний статус клиента (т.е. не у всех из них есть отчет Week52):

  1. Напишите запрос, который возвращает последнее имя отчета, которое вы хотите (с учетом ваших фильтров) для каждой tenancyref.
  2. Присоедините этот запрос к вашему первому запросу на tenancyref.
  3. Измените вышеуказанные условные агрегаты на max(case when reportname = joinedTable.reportname ... )
person Kyle Hale    schedule 16.05.2016