1

我有一张表,其中一个 ID 可以与多个账单相关联。我需要做的是找到MAX账单金额、ID 和最高 ( MAX) 账单的日期。问题是每人可能有数千张账单,在任何给定日期可能有数百张。

我的查询

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

您当前方法的问题是,如果患者有两张最高金额的账单,您将同时获得这两张账单。

试试这个:

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

这将始终为每位患者返回一行,即使患者有两个具有相同最大值的账单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 回答