У меня есть две таблицы, которые я пытаюсь собрать, что для меня сложно. Мои две таблицы: weeks
и transactions
; Следующий запрос является то, что я создал, чтобы показать все новые клиент на основе впервые они имели сделки с нами:Настройка параметров даты, а затем установление количества
WITH newPat AS
(
SELECT
clinic, patient_id, MIN(date_entered) AS np_date
FROM
transactions
WHERE
impacts = 'P'
GROUP BY
clinic, patient_id
)
SELECT
n.clinic, COUNT(n.patient_id) AS new_pats,
n.np_date, w.start_week, w.week_id, w.wk_year
FROM
newPat n
INNER JOIN
weeks w ON (n.np_date BETWEEN w.start_week AND w.end_week)
GROUP BY
n.clinic, n.np_date, w.start_week, w.week_id, w.wk_year
Так WITH
является определение даты начала каждого patient_id
уникального для . Затем, используя эту информацию, определив, какие week_id
данного wk_year
совершили эту транзакцию. Это само по себе работает.
Беда в том, что мне также нужно вытащить amount
из таблицы транзакций для этих patient_id
за данную неделю было новое. Невозможно попытаться вытащить «количество» в WITH, иначе он будет создавать несколько записей как «новые» из-за различного количества. Было бы несколько записей для данного patient_id
в те же даты с изменением amount
, так как в этой таблице показаны отдельные услуги, даже если они попадают на один и тот же номер транзакции (tran_num
). Каким будет лучший способ найти эти данные?
EDIT FOR CLARIFICATION: Спасибо за быстрые комментарии, идентификатор транзакции может произойти снова, если есть какие-либо корректировки, внесенные в него по дороге. Мне нравится идея раздела, но мне нужно больше, чем первая строка, так как может быть несколько строк для одной и той же транзакции и даты. Я довольно новичок в SQL, поэтому я мог бы пропустить что-то простое. Но, по сути, мне нужно (SUM(amount) WHERE date_entered = MIN(date_entered))
и где patient_id AND clinic
уникальны.
Почему не вы суммируете выражение 'SUM' в условии with, чтобы они были агрегированы? Или я не понимаю этого требования. – Lock
Я думаю, что вместо СУММ всех сумм он хочет получить единственную сумму самой ранней строки по дате для этой клиники, patient_id. –