#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. его не работает, возвращает пустые данные.