Mysql 使用GROUPBY SQL选择多个列
我试图从一列中选择min date值,同时通过另一个非唯一id列进行分组,该列具有多个重复值,并且还希望显示满足前两个条件的相同行。原始数据库列类似于: ['TransactionDate'、'TransactionStatusID'、'DateOfEntry'、'DateOfService'、'Amount'、'TransactionTypeID'、'PaymentTypeId'、'PostDate'、'BillID'、'ChargeDetailID'] 第二张表看起来像: ['Amount','PracticeID','LoadDate','DateOfService','PerformingProvderID','CPTCodeID','ChargeDetailID'] 我在ChargeDetailID上连接这两个表,如下所示:Mysql 使用GROUPBY SQL选择多个列,mysql,sql,sql-server,Mysql,Sql,Sql Server,我试图从一列中选择min date值,同时通过另一个非唯一id列进行分组,该列具有多个重复值,并且还希望显示满足前两个条件的相同行。原始数据库列类似于: ['TransactionDate'、'TransactionStatusID'、'DateOfEntry'、'DateOfService'、'Amount'、'TransactionTypeID'、'PaymentTypeId'、'PostDate'、'BillID'、'ChargeDetailID'] 第二张表看起来像: ['Amount'
SELECT cd.PatientID, MIN(t.DateOfService) AS "Date Of Service"
FROM ChargeDetail as cd inner join transactions as t on cd.ChargeDetailID = t.ChargeDetailID
WHERE cd.PatientID IS NOT NULL
GROUP BY cd.PatientID
我从此查询中获得的结果:
| PatientID|Date Of Service|
+--------------------+---------------+
|D37224C7-9157-4C5...| 2020-03-30|
|5E693AF8-8332-477...| 2014-01-07|
|8C071F5C-2210-4A6...| 2013-02-14|
|38B11DAE-3FF1-4AD...| 2012-03-14|
|7DB00C43-36F6-40E...| 2009-01-16|
|940EEC5C-4781-4EB...| 2016-12-08|
我想要的结果是:
| PatientID|Date Of Service| cd.Amount| cd.BillID|
+--------------------+---------------+-----------+----------+
|D37224C7-9157-4C5...| 2020-03-30| 500 |10009
|5E693AF8-8332-477...| 2014-01-07| 250 |1492
|8C071F5C-2210-4A6...| 2013-02-14| 350 |15892
|38B11DAE-3FF1-4AD...| 2012-03-14| 222 |15596
|7DB00C43-36F6-40E...| 2009-01-16| 899 |20566
|940EEC5C-4781-4EB...| 2016-12-08| 650 |9566
您可以通过在组中添加cd.amount和cd.billid。但要求并不十分明确。您也可以使用窗口函数
SELECT cd.PatientID, cd.Amount, cd.BillID, MIN(t.DateOfService) AS "Date Of Service"
FROM ChargeDetail as cd inner join transactions as t on cd.ChargeDetailID = t.ChargeDetailID
WHERE cd.PatientID IS NOT NULL
GROUP BY cd.PatientID , cd.Amount, cd.BillID
您可以按如下方式使用windows功能-
Select
PatientID
, Amount
, BillId
, DateOfService As "Date Of Service"
from
(SELECT
cd.PatientID
,cd.Amount
,cd.BillId
,t.DateOfService
,row_number() over(partition by cd.PatientID order by t.DateOfService asc) as seqnum
FROM ChargeDetail as cd inner join transactions as t
on cd.ChargeDetailID = t.ChargeDetailID
WHERE cd.PatientID IS NOT NULL) t
Where t.seqnum = 1;
请注意,MySQL和SqlServer是两个不同的数据库,但是上述方法应该适用于这两个数据库。但我希望cd.PatientID是唯一的。从这个查询中,将有多个输入cd。PatientIDI没有考虑到这个需求。你需要像上面回答的那样使用窗口功能。我们是否也可以添加PatientID匹配的金额总和?我尝试了这个'Select DateOfEntry,DateOfService,amount,from Select t.DateOfEntry,t.DateOfService,sumt.Amount as TotalAmount FROM ChargeDetail as cd internal join transactions as t on cd.ChargeDetailID=t.ChargeDetailID其中cd.PatientID不为NULL组BY PatientID`Yup,我们可以。既然这是一个新的要求,我建议你提出一个新的问题。谢谢