php - 如何合并此分类帐上的日期?

标签 php mysql

我有两个收据和支出表,正在使用 union 来合并它们并生成报告

SELECT  MIN(date) AS trx, MAX(date), COUNT(*), SUM(amount), CONCAT(' - ','-'),
    $f as _ 
FROM expenditure WHERE date >= '$start_date' AND date <= '$end_date'
    AND client_id like '{$_SESSION['client']['id']}'
GROUP BY _

UNION

SELECT  MIN(date) AS trx, MAX(date), COUNT(*),CONCAT(' - ','-'), SUM(amount),
    $f as _ 
FROM receipts
WHERE  date >= '$start_date'  AND date <= '$end_date'
   AND client_id like '{$_SESSION['client']['id']}'
GROUP BY _
ORDER BY trx

我得到以下结果

  Array ( 
          [0] => Array ( [trx] => 2012-03-06 [MAX(date)] => 2012-03-06 [COUNT(*)] => 1 [SUM(amount)] => 120000 [CONCAT(' - ','-')] => - - [_] => 2012-03-06 )
          [1] => Array ( [trx] => 2012-03-08 [MAX(date)] => 2012-03-08 [COUNT(*)] => 1 [SUM(amount)] => 120000 [CONCAT(' - ','-')] => - - [_] => 2012-03-08 )
          [2] => Array ( [trx] => 2012-06-06 [MAX(date)] => 2012-06-06 [COUNT(*)] => 2 [SUM(amount)] => 60000 [CONCAT(' - ','-')] => - - [_] => 2012-06-06 ) 
          [3] => Array ( [trx] => 2012-06-06 [MAX(date)] => 2012-06-06 [COUNT(*)] => 1 [SUM(amount)] => - - [CONCAT(' - ','-')] => 487200 [_] => 2012-06-06 )
          [4] => Array ( [trx] => 2012-06-08 [MAX(date)] => 2012-06-08 [COUNT(*)] => 1 [SUM(amount)] => 120000 [CONCAT(' - ','-')] => - - [_] => 2012-06-08 )
          [5] => Array ( [trx] => 2012-06-29 [MAX(date)] => 2012-06-29 [COUNT(*)] => 2 [SUM(amount)] => 320000 [CONCAT(' - ','-')] => - - [_] => 2012-06-29 )  )

问题 如果您注意到 3 号和 4 号,一天有两条记录。

[trx] => 2012-06-06

因为那天客户同时进行了贷方和借方操作。有没有办法只将第 3 行和第 4 行合并为一行。 SELECT DISTINCT 不起作用,或者 mysql 是否可以对同一日期发生的两个表中的记录进行求和。

最佳答案

您可以使用自定义别名的子选择来分组

$query = "
    SELECT q.* 
    FROM (
        SELECT  
            MIN(date) AS trx, 
            MAX(date) as max_date, 
            COUNT(*), 
            SUM(amount), 
            CONCAT(' - ','-'),
            $f as _ 
        FROM 
            expenditure 
        WHERE 
            date >= '$start_date'  
            AND date <= '$end_date'  
            AND client_id like '{$_SESSION['client']['id']}' 
        GROUP BY _ 
    UNION
        SELECT  
            MIN(date) AS trx, 
            MAX(date), 
            COUNT(*),
            CONCAT(' - ','-'),
            SUM(amount), 
            $f as _ 
        FROM 
            receipts 
        WHERE  
            date >= '$start_date'  
            AND  date <= '$end_date'  
            AND  client_id like '{$_SESSION['client']['id']}' 
        GROUP BY _ ORDER BY trx 
    ) q GROUP BY q.max_date
";

以上查询将按 MAX(date) 作为 max_date 对结果进行分组

对于同一天的金额总和,您可以修改为

$query = "
    SELECT 
        q.*, 
        SUM(q.amount) AS grand_sum 
    FROM (
        SELECT  
            MIN(date) AS trx, 
            MAX(date) as max_date, 
            COUNT(*), 
            SUM(amount) AS amount, 
            CONCAT(' - ','-'),
            $f as _ 
        FROM 
            expenditure 
        WHERE 
            date >= '$start_date'  
            AND date <= '$end_date'  
            AND client_id like '{$_SESSION['client']['id']}' 
        GROUP BY _ 
    UNION
        SELECT  
            MIN(date) AS trx, 
            MAX(date), 
            COUNT(*),
            CONCAT(' - ','-'),
            SUM(amount), 
            $f as _ 
        FROM 
            receipts 
        WHERE  
            date >= '$start_date'  
            AND  date <= '$end_date'  
            AND  client_id like '{$_SESSION['client']['id']}' 
        GROUP BY _ ORDER BY trx 
) q GROUP BY q.max_date
";

grand_sum列包含同一日期的金额总和

关于php - 如何合并此分类帐上的日期?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18282135/

相关文章:

mysql - 如何获取以 GB 为单位的 mysql 表大小

PHP MySQL 数据网格允许保存 SQL 查询

php - MongoDB 4.2 中的事务与新的 PHP 驱动程序

php - 将数据插入多个表

php - XML 错误 : Only one top level element is allowed

带套接字的 Java 客户端和 PHP 服务器

php - 在 MySQL [+php?] 中合并的另一行

MySQL 查询错误,名为 "order"的表

MySQL工作台同步: error in CREATE TABLE IF NOT EXISTS `mydb` .`timestamps` (

php - move_uploaded_file 失败但权限似乎正确