【发布时间】:2017-11-29 06:57:54
【问题描述】:
我知道如何在单个查询中获取过去 6 个月的数据,但我有一个从多个子查询中获取数据的查询,我只需要显示过去 6 个月。
这是我当前的查询
SELECT `totalSales`,`totalPurchase`,`totalNetpay`,`totalPension`,`totalP32`
FROM
(SELECT SUM((`Unit_Cost`*`ExchangeRate`)*`Quantity`) AS `totalSales` FROM `salesinvoice_products` AS `prod`
LEFT JOIN `salesinvoice` AS `inv` on `prod`.`SalesInvoice_id`=`inv`.`SalesInvoice_id`) as `t1`,
(SELECT SUM((`InvoiceValue`*`ExchangeRate`)-`VATValue`) as `totalPurchase` FROM `purchaseinvoice`) as `t2`,
(SELECT SUM(`NetAmountPaid`) as `totalNetpay` FROM `payroll_netpay`) as `t3`,
(SELECT SUM(`totalAmountDue`) as `totalPension` FROM `payroll_pensionrecords`) as `t4`,
(SELECT SUM(`totalAmountDue`) as `totalP32` FROM `payroll_p32records`) as `t5`
如您所见,我有 5 个子查询。目前这给了我输出 3122.051719,2173.911200,10019.00,7351.56,2231.43
但是,我想要的是从过去 6 个月中获得 6 行。但是,当我尝试这样做时,我得到了多行而不是 6 行。我认为我必须以某种方式对它们进行分组。
好的,现在我将向您展示我试图让它工作的代码。
SELECT `InvoiceDate`,`totalSales`,`totalPurchase`,`totalNetpay`,`totalPension`,`totalP32`
FROM
(SELECT SUM((`Unit_Cost`*`ExchangeRate`)*`Quantity`) AS `totalSales`,`InvoiceDate` FROM `salesinvoice_products` AS `prod`
LEFT JOIN `salesinvoice` AS `inv` on `prod`.`SalesInvoice_id`=`inv`.`SalesInvoice_id`
WHERE (`InvoiceDate` < Now() and `InvoiceDate` > DATE_ADD(Now(), INTERVAL- 6 MONTH)) && `InvoiceType`>1
GROUP BY MONTH(`InvoiceDate`)
) as `t1`,
(SELECT SUM((`InvoiceValue`*`ExchangeRate`)-`VATValue`) as `totalPurchase` FROM `purchaseinvoice`
WHERE (`InvoiceDate` < Now() and `InvoiceDate` > DATE_ADD(Now(), INTERVAL- 6 MONTH))
GROUP BY MONTH(`InvoiceDate`)
) as `t2`,
(SELECT SUM(`NetAmountPaid`) as `totalNetpay` FROM `payroll_netpay`
WHERE (`Date` < Now() and `Date` > DATE_ADD(Now(), INTERVAL- 6 MONTH))
GROUP BY MONTH(`Date`)
) as `t3`,
(SELECT SUM(`totalAmountDue`) as `totalPension` FROM `payroll_pensionrecords`
WHERE (`datePaid` < Now() and `datePaid` > DATE_ADD(Now(), INTERVAL- 6 MONTH))
GROUP BY MONTH(`datePaid`)
) as `t4`,
(SELECT SUM(`totalAmountDue`) as `totalP32` FROM `payroll_p32records`
WHERE (`datePaid` < Now() and `datePaid` > DATE_ADD(Now(), INTERVAL- 6 MONTH))
GROUP BY MONTH(`datePaid`)
) as `t5`
你可以猜到这个查询确实有效,但是我得到了 20 行奇数行,而不是 6 行。我知道我必须以某种方式对它们进行分组,但我不确定如何?最大的问题是不同的表有不同的命名日期字段,我现阶段无法更改。
编辑—— 我尝试了不同的方法。我已将我的查询减少到两个项目以使其更容易。如果我在它之间使用它可以工作,但我必须以某种方式在不同的月份喂食。
SELECT `totalSales`,`totalPurchase`
FROM
(SELECT SUM((`Unit_Cost`*`ExchangeRate`)*`Quantity`) AS `totalSales` FROM `salesinvoice_products` AS `prod`
LEFT JOIN `salesinvoice` AS `inv` on `prod`.`SalesInvoice_id`=`inv`.`SalesInvoice_id`
WHERE `InvoiceDate` BETWEEN '2017-06-01' AND '2017-06-26'
) as `t1`,
(SELECT SUM((`InvoiceValue`*`ExchangeRate`)-`VATValue`) as `totalPurchase` FROM `purchaseinvoice`
WHERE `InvoiceDate` BETWEEN '2017-06-01' AND '2017-06-26'
) as `t2`
它的作用是给我一个月的数据,但它对我的初始查询并没有太大帮助,但我尝试过其他一些东西。
【问题讨论】:
-
很好,我已经阅读了整个页面,但没有一次在该页面上说明 MCVE 的含义,这确实没有帮助。至于显示创建和插入,我在 dbforge 中构建数据库时没有使用它们,并且我已经尽我最大的努力使用我的第二段代码。至于关系,这些对上面的代码没有任何影响。我上面的代码中确实应该有足够的信息来提供解决方案。最终可能会自己解决。
-
也许你还没有真正阅读整页。
-
@ThomasWilliams Strawberry 创建并链接到这个问题的整个指南都是关于 MCVE。由于您的查询在语法上是正确的,所以不要返回预期的结果集,因此您应该提供一些示例数据并解释您要实现的内容。以目前的形式,我不知道你在追求什么,从关闭和否决的投票来看,我并不是唯一一个遇到这个问题的人。你可以随心所欲地抨击草莓,但这不会让你得到答案。
-
我认为这很简单。第一个查询给了我总数,但我想要过去 6 个月的总数。第二个 mysql 代码显示了我尝试过但显然不起作用的内容。所有的领域都在那里,任何人都可以看到。至于 MCVE,我什至不知道 Acronym 是什么。我已经阅读了 Strawberry 提供的整页内容,但没有一次告诉我它是什么。