如何按日期分组

时间:2019-04-10 13:23:46

标签: mysql sql

下面我不能按日期分组以下数字。

我尝试将分组依据放在不同的行中,但不起作用。

SELECT SUM(a.NetAmount) AS TotalDonation
FROM (
 SELECT
  (
   CASE WHEN bt.BalanceTransactionCurrencyID = 17
    THEN bt.BalanceTransactionNet
   ELSE
    bt.BalanceTransactionNet * (SELECT TOP 1 ExrateValue FROM Exrate WHERE ExrateDate < bt.BalanceTransactionCreated AND bt.BalanceTransactionCurrencyID = CurrencyID ORDER BY ExrateDate Desc)
   END
  ) AS NetAmount

 FROM Charge as ch

 JOIN BalanceTransaction as bt ON (ch.BalanceTransactionID = bt.BalanceTransactionID)

 WHERE ch.ChargeCreatedDate BETWEEN '3-1-2019' AND '3-31-2019'

) AS a

我想看:

Days              Total Amount
March 1           xxxx
March 2           xxxx
March 3           xxx

2 个答案:

答案 0 :(得分:0)

以下代码有望显示您正在寻找的东西

SELECT a.Days AS Days, SUM(cast(a.NetAmount as decimal(16,9))) AS TotalDonation
FROM (
 SELECT
  (
   CASE WHEN bt.BalanceTransactionCurrencyID = 17
    THEN bt.BalanceTransactionNet
   ELSE
    bt.BalanceTransactionNet * (SELECT TOP 1 ExrateValue FROM Exrate WHERE ExrateDate < bt.BalanceTransactionCreated AND bt.BalanceTransactionCurrencyID = CurrencyID ORDER BY ExrateDate Desc)
   END
  ) AS NetAmount,
 ch.ChargeCreatedDate as Days

 FROM Charge as ch

 JOIN BalanceTransaction as bt ON (ch.BalanceTransactionID = bt.BalanceTransactionID)

 WHERE ch.ChargeCreatedDate BETWEEN '3-1-2019' AND '3-31-2019'

) AS a GROUP BY a.Days

这应该足够了。您需要在查询中SELECT来显示所需的值。同样,在使用SUM()函数时,您需要指定组的值。

答案 1 :(得分:0)

MySQL不使用var prodArray = [{"productId":1,"productName":"abc","checked":false},{"productId":2,"productName":"def","checked":false},{"productId":3,"productName":"ghi","checked":false},{"productId":4,"productName":"jkl","checked":false}]; var orderArray = [{"productId":1,"productName":"abc"},{"productId":4,"productName":"jkl"}] let productIDs = new Set(orderArray.map(o => o.productId)); let result = prodArray.map(o => ({ ...o,checked: productIDs.has(o.productId)})); console.log(result);。使用TOP

LIMIT

如果您恰好在使用SQL Server,则可以将SELECT ChargeCreatedDate, SUM(netamount) FROM (SELECT ch.ChargeCreatedDate, (CASE WHEN bt.BalanceTransactionCurrencyID = 17 THEN bt.BalanceTransactionNet ELSE bt.BalanceTransactionNet * (SELECT e.ExrateValue FROM Exrate e WHERE e.ExrateDate < bt.BalanceTransactionCreated AND e.CurrencyID = bt.BalanceTransactionCurrencyID ORDER BY ExrateDate Desc LIMIT 1 ) END) AS NetAmount FROM Charge ch JOIN BalanceTransaction bt ON ch.BalanceTransactionID = bt.BalanceTransactionID WHERE ch.ChargeCreatedDate BETWEEN '2019-03-01' AND '2019-03-31' ) chtbt GROUP BY ChargeCreatedDate; 替换为LIMIT 1