我有两个收据和支出表,正在使用 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/