我想创建一个查询,我不必使用GROUP BY来获取我的项目,否则他们会将数据拆分成行。这是我有,运行,但我得到相同的行patient_id
和last_service
和last_payment
从不出现在同一行中。我得到3行,他们似乎分裂了last_service
,last_payment
,以及一行都是NULL。这是我的查询:多个行相同的标识
WITH adj_rep_les AS(
SELECT DISTINCT t.clinic, t.patient_id, a.adj_desc
FROM transactions t
LEFT JOIN adjustments a
ON(t.clinic=a.clinic AND a.adjustment_id=t.adjustment_id)
WHERE a.adj_desc LIKE '%TAB%'
AND time_ran > '2016-03-27')
SELECT DISTINCT
c.clinic_id,
w.patient_id,
p.city,
p.state,
p.zipcode,
SUM(t.amount) OVER (PARTITION BY w.clinic, w.patient_id) AS balance,
CASE WHEN t.impacts='P' THEN FIRST_VALUE(t.date_entered) OVER (PARTITION BY w.clinic, w.patient_id ORDER BY t.date_entered DESC) END AS last_service,
CASE WHEN t.impacts='C' THEN FIRST_VALUE(t.date_entered) OVER (PARTITION BY w.clinic, w.patient_id ORDER BY t.date_entered DESC) END AS last_payment,
FIRST_VALUE(s.description) OVER (PARTITION BY w.clinic, w.patient_id ORDER BY t.date_entered DESC) AS service_done
FROM adj_rep_les w
LEFT JOIN clinic_master c
ON (w.clinic=c.clinic)
LEFT JOIN patient p
ON (w.clinic=p.clinic AND w.patient_id=p.patient_id)
LEFT JOIN transactions t
ON (w.clinic=t.clinic AND w.patient_id=t.patient_id)
LEFT JOIN services s
ON (t.clinic=s.clinic AND t.service_code=s.service_code)
有什么想法?我还要提到CASE
内的FIRST_VALUE
似乎没有工作并给出相同的结果,无论如何忽略t.impacts
的过滤器。在壳体内使用MAX(t.date_entered)可选择地尝试,但需要一个GROUP BY
由于MAX
作为一个聚合函数
预先感谢。
只是一个猜测,因为没有提供样本数据和ddl。尝试移动'CASE WHEN t.impacts ='P'THEN FIRST_VALUE(t.date_entered)OVER(PARTITION BY w.clinic,w.patient_id ORDER BY t.date_entered DESC)END as last_service, CASE WHEN t.impacts ='C 'THEN FIRST_VALUE(t.date_entered)OVER(通过w.clinic分区,w.patient_id ORDER BY t.date_entered DESC)END AS last_payment'传递给CTE并在CTE中转换它们,并在主SELECT中删除具有事务的联接。 – Serg