如何获得与MIN或MAX关联的值

时间:2016-02-09 20:05:39

标签: sql sql-server

我正在创建一个查询并将其放在我需要其他值的位置,但是我为个别patient_id提取了一个MIN和MAX日期。我想知道我将如何获取与该MIN或MAX日期相关的值?我正在寻找列provider_id的值,该列将显示他们在MIN或MAX日期看到的医生。以下是我到目前为止的情况:

WITH test AS (
SELECT  patient_id, 
        clinic, 
        SUM(amount) AS production,
        MIN(tran_date) AS first_visit, 
        MAX(tran_date) AS last_visit
FROM transactions
WHERE impacts='P'
GROUP BY patient_id, clinic)

SELECT  w.patient_id, 
        w.clinic, 
        p.city, 
        p.state, 
        p.zipcode, 
        p.sex, 
        w.production,
        w.first_visit, 
        w.last_visit
FROM test w
LEFT JOIN patient p
    ON (w.patient_id=p.patient_id AND w.clinic=p.clinic)

2 个答案:

答案 0 :(得分:2)

我相信这会得到你想要的东西:

;WITH CTE_Transactions AS (
    SELECT DISTINCT
        patient_id, 
        clinic, 
        SUM(amount) OVER (PARTITION BY patient_id, clinic) AS production,
        FIRST_VALUE(tran_date) OVER (PARTITION BY patient_id, clinic ORDER BY tran_date) AS first_visit,
        FIRST_VALUE(provider_id) OVER (PARTITION BY patient_id, clinic ORDER BY tran_date) AS first_provider_id,
        LAST_VALUE(tran_date) OVER (PARTITION BY patient_id, clinic ORDER BY tran_date) AS last_visit,
        LAST_VALUE(provider_id) OVER (PARTITION BY patient_id, clinic ORDER BY tran_date) AS last_provider_id,
        ROW_NUMBER() OVER (PARTITION BY patient_id, clinic ORDER BY tran_date) AS row_num
FROM Transactions
WHERE impacts='P'
)
SELECT
    w.patient_id, 
    w.clinic, 
    p.city, 
    p.state, 
    p.zipcode, 
    p.sex, 
    w.production,
    w.first_visit, 
    w.last_visit
FROM
    CTE_Transactions W
LEFT JOIN Patient P ON
    W.patient_id = P.patient_id AND
    W.clinic = P.clinic
INNER JOIN Provider FIRST_PROV ON
    FIRST_PROV.provider_id = W.first_provider_id
INNER JOIN Provider LAST_PROV ON
    LAST_PROV.provider_id = W.last_provider_id
WHERE
    W.row_num = 1

答案 1 :(得分:1)

我假设你指的是CTE。您可以使用条件聚合和窗口函数。例如,要获得第一次访问的金额:

compile 'com.google.android.gms:play-services-auth:8.4.0'