MySQL - сложная группа по обслуживанию батареи

0

У меня есть таблица, содержащая следующие поля.

EntryID, Date, BatteryID, Capacity, Type

EntryID - это уникальный номер записи автоматического увеличения
Дата - это дата, когда запись была создана
BatteryID - уникальное название для этой батареи, такой NiMh1, NiMh2 и т.д.
Емкость - это измеренная емкость этой конкретной батареи
Тип - это тип батареи, такой как NiMh AA, NiCD AAA, NiMh AAA, NiMh D и т.д.

Я бы хотел...

1). Выберите все батареи типа NiMh AA
2). От тех, которые я хочу сортировать (группировать) их по BatteryID
3). Для каждого идентификатора батареи я хочу выбрать ТОЛЬКО тот, который имеет самую последнюю дату

Это строка запроса, которую я использую, и она почти работает, но не выбирает запись для каждой батареи с последней DATE. Я не вижу, как рассказать оператор Group By, чтобы выбрать запись с последней датой в этой ситуации.

Выберите BatteryID, емкость, тип, примечания от батарей, где тип = группа "NiMh AA" по заказу BatteryID по мощности

Спасибо

Я получаю это.....
Изображение 1

Изображение 174551

Я хочу этот.....

Image2

Изображение 174551

Теги:

1 ответ

2
Лучший ответ

Это очень распространенное требование к отчетности. В MySQL вы можете справиться с этим, присоединившись к подзапросу, который выполняет GROUP BY чтобы найти самую последнюю запись для каждой группы батарей:

SELECT b1.*
FROM batteries b1
INNER JOIN
(
    SELECT BatteryID, MAX(Date) AS max_date
    FROM batteries
    WHERE type = 'NiMh AA'
    GROUP BY BatteryID
) b2
    ON b1.BatteryID = b2.BatteryID AND b1.Date = b2.max_date
WHERE
    b1.type = 'NiMh AA';
  • 0
    Это дает мне дубликаты по какой-то причине, но выглядит очень многообещающе. Я постараюсь работать с этим. Благодарю.
  • 1
    Что вы определяете как дубликат? Что должно произойти, если на конкретную батарею подключено не более одной записи?
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню