#mysql #sql
#mysql #sql
Вопрос:
У меня есть такая таблица
create table events
(
sensor_id integer not null,
event_type integer not null,
value integer not null,
time timestamp unique not null
);
Я хочу показывать уникальные записи и принимать записи, которые имеют максимальное время, я написал этот запрос
SELECT B.*
FROM events AS B
RIGHT JOIN (SELECT DISTINCT sensor_id, event_type, MAX(time) AS MaxDateTime
FROM events
GROUP BY sensor_id, event_type
ORDER BY MAxDateTime DESC) A ON B.time = A.MaxDateTime
Я хочу пропустить столбец time и просто показать sensor_id, event_type и значение в конечном результате, какие-нибудь мысли?
Комментарии:
1. изменить
b.*
наB.sensor_ID, B.event_Type, B.Value
2. но тогда как насчет B.time = A.MaxDateTime?
3. это критика соединения. Я бы подумал, что вы захотите присоединиться к этому и sensor_Id и event_Type… время не будет отображаться, будет отображаться только то, что указано в выборе.
4. хорошо, позвольте мне попробовать.
5. но тогда как насчет B.time = A.MaxDateTime? Ничего. Проекция и выбор — это разные вещи.
Ответ №1:
- измените B. * на нужные столбцы в ваших выходных данных…
- упорядочивание подзапроса не имело смысла, поэтому я переместил его во внешний (обратите внимание, что вы все равно можете упорядочивать по столбцу, который не отображается!)
- Я добавил критерии объединения, чтобы включить sensor и event_Type
.
SELECT B.sensor_ID, B.event_Type, B.Value
FROM events AS B
RIGHT JOIN (SELECT distinct sensor_id, event_type, max(time) AS MaxDateTime
FROM events
GROUP BY sensor_id, event_type) A
on B.time = A.MaxDateTime
and B.Sensor_ID = A.Sensor_ID
and B.Event_Type = A.Event_Type
ORDER BY B.Time
Ответ №2:
Если вам нужна одна строка за sensor_id
максимальное время, тогда что-то вроде этого:
select e.*
from events e
where e.time = (select max(e2.time)
from events e2
where e2.sensor_id = e.sensor_id
);
Редактировать:
Если вам нужно максимальное значение для каждого датчика и события, включите это в предложение correlation:
select e.*
from events e
where e.time = (select max(e2.time)
from events e2
where e2.sensor_id = e.sensor_id and
e2.event_type = e.event_type
);
Комментарии:
1. Я думаю, вам понадобится дополнительная координация в подзапросе:
e2.event_Type = E.Event_Type
. кажется, они хотят максимум для каждого датчика и события.