Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/67.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-返回多个条目在一列中两行的最新日期和总和_Mysql_Sql - Fatal编程技术网

MySQL-返回多个条目在一列中两行的最新日期和总和

MySQL-返回多个条目在一列中两行的最新日期和总和,mysql,sql,Mysql,Sql,对于每个ID_编号,都有一个账单日期,然后发生两种类型的账单。我想返回每个ID号的最新日期max date,然后将两种类型的账单金额相加。因此,根据下表,它应该返回: | 1 | 201604 | 10.00 | | | 2 | 201701 | 28.00 | | tbl_charges +-----------+-----------+-----------+--------+ | ID_Numbe

对于每个ID_编号,都有一个账单日期,然后发生两种类型的账单。我想返回每个ID号的最新日期max date,然后将两种类型的账单金额相加。因此,根据下表,它应该返回:

|         1 |    201604 | 10.00     |        |

|         2 |    201701 | 28.00     |        |


tbl_charges
+-----------+-----------+-----------+--------+
| ID_Number | Bill_Date | Bill_Type | Amount |
+-----------+-----------+-----------+--------+
|         1 |    201601 | A         |   5.00 |
|         1 |    201601 | B         |   7.00 |
|         1 |    201604 | A         |   4.00 |
|         1 |    201604 | B         |   6.00 |
|         2 |    201701 | A         |  15.00 |
|         2 |    201701 | B         |  13.00 |
+-----------+-----------+-----------+--------+
然后,如果可能的话,我希望能够在另一个查询中的联接中执行此操作,使用ID_Number作为联接的列。这会改变这里的疑问吗

注意:我最初只想查询大约1000万个不同的ID_编号中的大约200个。我将为这些ID添加一个“IN”子句。当我为最终产品加入时,我需要知道如何从所有其他加入可能性中获得最新的日期。也就是说,我如何让ID_No.1加入201604而不是201601?

我将使用“不存在”和“分组依据”


NOT EXISTS筛选出不相关的行并按总和分组。

我倾向于在其中进行筛选:

或者,另一个有趣的方法是与元组一起使用:

select id_number, sum(c.amount)
from tbl_charges c
where (c.id_number, c.bill_type, c.date) in
          (select c2.id_number, c2.bill_type, max(c2.date)
           from tbl_charges c2
           group by c2.id_number, c2.bill_type
          )
group by id_number;

你是想在某处申报t2吗?我不应该申报t2.bill\u date>t1.bill\u date吗?你写的方式给了我最早的日期,而不是最晚的日期。
select id_number, sum(c.amount)
from tbl_charges c
where c.date = (select max(c2.date)
                from tbl_charges c2
                where c2.id_number = c.id_number and c2.bill_type = c.bill_type
               )
group by id_number;
select id_number, sum(c.amount)
from tbl_charges c
where (c.id_number, c.bill_type, c.date) in
          (select c2.id_number, c2.bill_type, max(c2.date)
           from tbl_charges c2
           group by c2.id_number, c2.bill_type
          )
group by id_number;