如何在 mysql 的同一列中为日期使用多个 where between?

How to use multiple where between for date in same column in mysql?

我需要同一列的两个不同值,但在不同的日期范围内,这就是我正在做的

   SELECT `sales-store-id`,
((SUM (`gen-acute-sales-after-returns`) AS `totalGenericSales` ,
(SUM(`eth-acute-sales-after-returns`) AS `totalEthicalSales`, 
SUM(`sales-after-returns`) AS `totalSales` WHERE `date-s` BETWEEN '2018-11-01' AND '2018-11-12') 
AND
  ((SUM (`gen-acute-sales-after-returns`)) AS `totalGenericSalesPM` ,
(SUM(`eth-acute-sales-after-returns`)) AS `totalEthicalSalesPM`,
 SUM(`sales-after-returns`) AS `totalSalesPM` 
FROM `sales` WHERE `date-s` BETWEEN '2018-10-01' AND '2018-10-12') 
GROUP BY`sales-store-id`

它在单个日期范围内工作,但在添加多个日期范围后出现语法错误

您可以尝试使用条件聚合

SELECT `sales-store-id`,
SUM (case when `date-s` BETWEEN '2018-11-01' AND '2018-11-12' then `gen-acute-sales-after-returns` end) AS `totalGenericSales` ,
SUM(case when `date-s` BETWEEN '2018-11-01' AND '2018-11-12' then `eth-acute-sales-after-returns` end) AS `totalEthicalSales`, 
SUM(case when `date-s` BETWEEN '2018-11-01' AND '2018-11-12' then `sales-after-returns` end) AS `totalSales`,  
SUM (case when `date-s` BETWEEN '2018-10-01' AND '2018-10-12' then `gen-acute-sales-after-returns` end ) AS `totalGenericSalesPM` ,
SUM(case when `date-s` BETWEEN '2018-10-01' AND '2018-10-12' then `eth-acute-sales-after-returns` end) AS `totalEthicalSalesPM`,
SUM(case when `date-s` BETWEEN '2018-10-01' AND '2018-10-12' then `sales-after-returns` end) AS `totalSalesPM` 
FROM `sales` 
GROUP BY`sales-store-id`

使用 UNION ALL 对不同日期范围的子查询进行分组可能适用于此。

SELECT `sales-store-id`,
SUM(GenericSales) AS TotalGenericSales,
SUM(EthicalSales) AS TotalEthicalSales,
SUM(Sales) AS TotalSales,
SUM(GenericSalesPM) AS TotalGenericSalesPM,
SUM(EthicalSalesPM) AS TotalEthicalSalesPM,
SUM(SalesPM) AS TotalSalesPM
FROM
(
  SELECT `sales-store-id`,
  `gen-acute-sales-after-returns` AS GenericSales,
  `eth-acute-sales-after-returns` AS EthicalSales, 
  `sales-after-returns` AS Sales,
  0.0 AS GenericSalesPM, 
  0.0 AS EthicalSalesPM, 
  0.0 AS SalesPM
  FROM `sales` 
  WHERE `date-s` BETWEEN '2018-11-01' AND '2018-11-12' 

  UNION ALL

  SELECT `sales-store-id`, 0, 0, 0,
  `gen-acute-sales-after-returns`,
  `eth-acute-sales-after-returns`,
  `sales-after-returns` 
  FROM `sales`
  WHERE `date-s` BETWEEN '2018-10-01' AND '2018-10-12'
) q
GROUP BY `sales-store-id`