сумма значений из выбранных строк - PullRequest
0 голосов
/ 09 февраля 2019

всякий раз, когда я использую sum () для столбца, даже если я отфильтровал результаты, он все равно суммирует все значения.

ЗДЕСЬ МОЯ ТАБЛИЦА:

mysql> select * from tblmedstockin where  medid = 1004;
+--------------+-------+-----------------+-------------+----------------+
| medstockinid | medid | stockinquantity | stockindate | stockinexpdate |
+--------------+-------+-----------------+-------------+----------------+
|            5 |  1004 |             147 | 2019-01-29  | 2019-01-29     |
|            6 |  1004 |              20 | 2019-01-30  | 2019-01-30     |
|           13 |  1004 |              45 | 2019-02-07  | 2019-02-07     |
+--------------+-------+-----------------+-------------+----------------+


mysql> select stockinquantity as stockinquantity from tblmedstockin where  medid = 1004 order by stockindate asc;
+-----------------+
| stockinquantity |
+-----------------+
|             147 |
|              20 |
|              45 |
+-----------------+

Я ТОЛЬКО ХОЧУ ПЕРВЫЙ2 КОЛОННЫ, КОТОРЫЕ БУДУТ ПОДЧИНЕНЫ

mysql> select stockinquantity as stockinquantity from tblmedstockin where  medid = 1004 order by stockindate asc limit 2;
+-----------------+
| stockinquantity |
+-----------------+
|             147 |
|              20 |
+-----------------+

Я ПОЛУЧИЛ ЭТОТ РЕЗУЛЬТАТ:

mysql> select sum(stockinquantity) as stockinquantity from tblmedstockin where medid = '1004' order by stockindate asc limit 2;
+-----------------+
| stockinquantity |
+-----------------+
|             212 |
+-----------------+

ОЖИДАЕМЫЙ РЕЗУЛЬТАТ ДОЛЖЕН БЫТЬ:

+-----------------+
| stockinquantity |
+-----------------+
|             167 |
+-----------------+

1 Ответ

0 голосов
/ 09 февраля 2019

Ваша проблема в том, что предложения ORDER BY и LIMIT выполняются в конце, после того, как SUM произошло.Вам нужно сначала выбрать данные, которые вы хотите суммировать в подзапросе, а затем суммировать их:

SELECT SUM(stockinquantity) AS stockinquantity 
FROM (SELECT stockinquantity
      FROM tblmedstockin 
      WHERE medid = 1004
      ORDER BY stockindate asc
      LIMIT 2) t
...