Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 使用GROUPBY SQL选择多个列_Mysql_Sql_Sql Server - Fatal编程技术网

Mysql 使用GROUPBY SQL选择多个列

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'

我试图从一列中选择min date值,同时通过另一个非唯一id列进行分组,该列具有多个重复值,并且还希望显示满足前两个条件的相同行。原始数据库列类似于:

['TransactionDate'、'TransactionStatusID'、'DateOfEntry'、'DateOfService'、'Amount'、'TransactionTypeID'、'PaymentTypeId'、'PostDate'、'BillID'、'ChargeDetailID']

第二张表看起来像:

['Amount','PracticeID','LoadDate','DateOfService','PerformingProvderID','CPTCodeID','ChargeDetailID']

我在ChargeDetailID上连接这两个表,如下所示:

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,我们可以。既然这是一个新的要求,我建议你提出一个新的问题。谢谢