私は他の項目を取得するために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)
任意の考え?私はまた、t.impacts
のフィルタを無視しているかのように、CASE
内のFIRST_VALUE
が動作しておらず、同じ結果を与えているようには思えません。あるいはケース内MAX(t.date_entered)を使用して試みたが、それが原因MAX
集約関数である
おかげ。問題の
サンプルデータとddlが提供されていないため、ちょうど推測です。 WHEN t.impactsの= 'P' THEN FIRST_VALUE(t.date_entered)OVER(PARTITION t.date_entered DESC BY w.clinic、w.patient_id ORDER BY)last_service AS END、 CASE t.impactsの= 'C動き 'CASEを試します「CTEにAS last_payment END、 'THEN FIRST_VALUE(t.date_entered)OVER(t.date_entered DESC BY ORDERをw.patient_id、w.clinic BY PARTITION)とCTEでそれらを旋回し、そしてメインSELECTで取引に参加するドロップします。 – Serg