Как рассчитать сумму каждой последней строки группы в mysql

#mysql #sql #mysql-5.7

Вопрос:

vehicle_assignment_history

 id    companyAccountId          date           totalVan     totalBike
1            4           2021-11-11 00:00:00     2             0
2            4           2021-11-11 00:00:00     3             0
3            4           2021-11-11 00:00:00     1             0        
4            8           2021-11-11 00:00:00     1             0
5            8           2021-11-12 00:00:00     2             0        
6            9           2021-11-13 00:00:00     0             2
7            9           2021-11-14 00:00:00     0             1        
 

Я хочу рассчитать сумму каждой группы в последней строке companyAccountId .также дата в диапазоне.

например:- 2021-11-11 -> 2021-11-13

    totalVan              totalBike
1   2   0 = 3           0   0   2 = 2
 

2021-11-11 -> 2021-11-14

    totalVan              totalBike
1   2   0 = 3           0   0   1 = 1
 

Комментарии:

1. что это select version(); показывает?

2. Ваш пример здесь кажется немного неуместным по сравнению с данными истории присвоения транспортных средств, которые вы предоставили

3. @ysth ‘5.7.36-0ubuntu0.18.04.1’

4. это единственный способ узнать, что сравнивается в последнее id время ? или date и id ?

5. @ysth да только идентификатор

Ответ №1:

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

 select sum(latestTotalVan) as totalVan, sum(latestTotalBike) as totalBike
from (
    select
        cast(substring(max(concat(lpad(id,11,'0'),totalVan)) from 12) as unsigned) latestTotalVan,
        cast(substring(max(concat(lpad(id,11,'0'),totalBike)) from 12) as unsigned) latestTotalBike
    from vehicle_assignment_history
    where date between '2021-11-11 00:00:00' and '2021-11-14 00:00:00'
    group by companyAccountId
) latest_values
 

играть на скрипке

mysql 8 добавляет оконные функции, которые значительно упрощают подобные вещи.

Комментарии:

1. вы можете поблагодарить меня лучше всего, убедившись, что понимаете, как это работает, чтобы в следующий раз, когда возникнет что-то подобное, вы могли сделать это сами 🙂 пожалуйста, спросите, если что-то неясно

2. конечно, я буду @ysth

Ответ №2:

ВЫБЕРИТЕ КОД компании, сумма(totalVan) КАК [Общее количество фургонов], сумма(totalBike) КАК [Общее количество велосипедов] ИЗ ГРУППЫ vehicle_assignment_history ПО ПАРАМЕТРУ компании, ИМЕЮЩЕМУ «2021-11-11» < дата И дата

Комментарии:

1. его не работает, возвращает пустые данные.