Как сгруппировать по дате - PullRequest
0 голосов
/ 10 апреля 2019

Ниже я не могу сделать Группировать по дате следующие цифры.

Я пытался поместить Group By в разные строки, но не работает.

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 голосов
/ 10 апреля 2019

MySQL не использует TOP. Используйте LIMIT:

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;

Если вы используете SQL Server, вы можете заменить LIMIT 1 на FETCH FIRST 1 ROW ONLY.

0 голосов
/ 10 апреля 2019

Следующий код, мы надеемся, отобразит то, что вы ищете

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() необходимо указать значение группы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...