搜索日期范围时,开始日期(date_reg)和结束日期(date_reg) ,mysql结果应该是每个main_table行包含每个产品的最新返回,接收,平衡。
例如:在 10-01-2014 和 10-05-2014 之间,应检索日期内每件商品的价值
Client Id | Return | Received | Balance
| prod 1 prod 2 | prod 1 prod 2 | prod 1 prod 2
--------------------------------------------------------------
1 | 2 [3] 2 [7] | 5 5 | 8 5
2 | 1 [5] 0 [8] | 5 5 | 9 3
3 | 0 [6] 1 [10]| 5 5 | 7 6
[id] ,其中 id 是sub_table的主键
<小时/> 我试过mysql查询
SELECT p.product_name, ipd.id as ipd_id, i.id as i_id, ipd.*, i.*
FROM main_table i
LEFT JOIN sub_table ipd ON ipd.main_table_id=i.id AND ipd.product_id IN (1,2)
LEFT JOIN product p ON ipd.product_id=p.id
WHERE ipd.date_reg IN (SELECT MAX(ipd1.date_reg)
FROM sub_table ipd1
WHERE ipd1.main_table_id=i.id AND
date_reg BETWEEN '10-01-2014' AND '10-05-2014')
ORDER BY cl.id ASC LIMIT 0, 20
它只返回每个客户的退货,收货和余额的单一产品
答案 0 :(得分:1)
使用子查询WHERE&#39; ipd.date_reg IN&#39; SELECT MAX ...&#39;您只能根据您的数据获得1个条目 - 10-04-2014。工作正常。
答案 1 :(得分:1)
尝试在子查询中使用 GROUP BY
GROUP_CONCAT(expr); 有助于执行多对多信息,可用于将列值连接成单个字符串。
答案 2 :(得分:1)
我得到了输出。谢谢大家的帮助。
我使用GROUP_CANCAT将结果连接成一个用逗号分隔的字符串
SELECT p.product_name, ipd.id as ipd_id, i.id as i_id, ipd.*, i.*,
GROUP_CONCAT(product_id SEPARATOR ',') as group_product_id,
GROUP_CONCAT(ipd.return SEPARATOR ',') as group_return,
GROUP_CONCAT(ipd.received SEPARATOR ',') as group_received,
GROUP_CONCAT(ipd.balance SEPARATOR ',') as group_balance
FROM main_table i
LEFT JOIN sub_table ipd ON ipd.main_table_id=i.id AND ipd.product_id IN (1,2)
LEFT JOIN product p ON ipd.product_id=p.id
WHERE ipd.date_reg IN (SELECT MAX(ipd1.date_reg)
FROM sub_table ipd1
WHERE ipd1.main_table_id=i.id AND
date_reg BETWEEN '10-01-2014' AND '10-05-2014'
GROUP BY ipd1.product_id)
ORDER BY cl.id ASC LIMIT 0, 20
结果
Client Id | group_product_id | group_return | group_received | group_balance
--------------------------------------------------------------------------
1 | 1, 2 | 2, 2 | 5,5 | 8,5
2 | 1, 2 | 1, 0 | 5,5 | 9,3
3 | 1, 2 | 0, 1 | 5,5 | 7,6
然后可以将字符串分解为数组。