Как использовать несколько, где между для даты в том же столбце в MySQL? - PullRequest
0 голосов
/ 12 ноября 2018

Мне нужны два разных значения одного и того же столбца, но между разными диапазонами дат, это то, что я делаю

   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`

это работало, когда для одного диапазона дат, но после добавления нескольких диапазонов дат выдает синтаксическую ошибку

Ответы [ 2 ]

0 голосов
/ 12 ноября 2018

Группировка по подзапросу с 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`
0 голосов
/ 12 ноября 2018

Вы можете попробовать использовать условное агрегирование

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`
...