1

IDを複数の請求書に関連付けることができるテーブルがあります。私がする必要があるのは、MAX請求額、ID、および最も高い(MAX)請求の日付を見つけることです。問題は、請求者が1人あたり数千人、特定の日に数百人になる可能性があることです。

私の質問

select patientID, max(amountPaid) as maxPaid
from myTable
group by patientID

日付を差し引いて、必要なものを教えてくれます。これを修正する私の試みは

select t.patientID, t.maxPaid, myTable.billDate
from myTable
inner join
(
select patientid, max(amountPaid) as maxPaid
from myTable
group by patientID
) as t on t.patientID=myTable.patientID and =t.maxPaid=myTable.maxPaid

与えられたエラーはinvalid column name maxPaidです。計算フィールドにエイリアスを指定しないようにしましたが、SQL ServerはmyTable.max(amountPaid)も受け入れませんでした。これを修正する最も簡単な方法は何ですか?前もって感謝します。

4

3 に答える 3

4

現在のアプローチの問題は、患者が最大額の請求書を2つ持っている場合、両方を取得することです。

代わりにこれを試してください:

SELECT 
    patientid,
    amountPaid AS max_paid,
    billDate
FROM
(
    SELECT
        patientid,
        amountPaid,
        billDate,
        ROW_NUMBER() OVER (PARTITION BY patientid
                           ORDER BY amountpaid DESC) AS RowNumber
    FROM myTable 
) T1
WHERE T1.RowNumber = 1

これは、患者が両方とも同じ最大値を持つ2つの請求書を持っている場合でも、常に患者ごとに1つの行を返しamountpaidます。

于 2012-07-19T21:29:01.963 に答える
2
;WITH x AS (SELECT PatientID, BillDate, AmountPaid,
  rn = ROW_NUMBER() OVER (PARTITION BY PatientID ORDER BY AmountPaid DESC)
  FROM dbo.myTable
)
SELECT PatientID, BillDate, AmountPaid
FROM x
WHERE rn = 1;
于 2012-07-19T21:29:17.363 に答える
1

あなたの説明に基づいて、私はあなたがこれを意味したと思います:

select t1.patientID, t2.maxPaid, t1.billDate
from myTable t1
inner join
(
    select patientid, max(amountPaid) as maxPaid
    from myTable
    group by patientID
) t2
on t1.patientID=t2.patientID 
and t1.amountPaid=t2.maxPaid
于 2012-07-19T21:27:36.797 に答える