SELECT *
FROM `primary`
WHERE `id` IN (
SELECT `s`.`primary_id`
FROM (
SELECT `primary_id`, MAX(`datetime`) AS `datetime`
FROM `secondary`
GROUP BY `primary_id`
) AS `t`
JOIN `secodary` AS `s` ON `s`.`state` = 1
AND `s`.`primary_id` = `t`.`primary_id`
AND `s`.`datetime` = `t`.`datetime`
)
CREATE TABLE `students` (
`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
`group` VARCHAR(20) NOT NULL,
`name` TINYTEXT,
`surname` TINYTEXT,
`patronymic` TINYTEXT,
`address` TINYTEXT,
`homePhone` TINYTEXT,
`contactPhone` VARCHAR(12) NOT NULL,
`yearOfEntry` DATE,
`avgGradePoint` FLOAT,
);
SELECT `p`.`pressure`, `t`.`temperature`, `h`.`humidity`
FROM (
SELECT `DATA_SENSOR` AS `pressure`
FROM `bmp_pressure`
WHERE `DATESTAMP` <= :dateTime
ORDER BY `DATESTAMP` DESC
LIMIT 1
) AS `p`
JOIN (
SELECT `DATA_SENSOR` AS `temperature`
FROM `bmp_temperature`
WHERE `DATESTAMP` <= :dateTime
ORDER BY `DATESTAMP` DESC
LIMIT 1
) AS `t`
JOIN (
SELECT `DATA_SENSOR` AS `humidity`
FROM `humidity`
WHERE `DATESTAMP` <= :dateTime
ORDER BY `DATESTAMP` DESC
LIMIT 1
) AS `h`
SELECT `p`.`hour`, `p`.`pressure`, `t`.`temperature`, `h`.`humidity`
FROM (
SELECT HOUR(`DATESTAMP`) AS `hour`, `DATA_SENSOR` AS `pressure`
FROM `bmp_pressure`
WHERE `DATESTAMP` BETWEEN :date AND :date + INTERVAL 1 DAY
GROUP BY HOUR(`DATESTAMP`)
) AS `p`
JOIN (
SELECT `DATA_SENSOR` AS `temperature`
FROM `bmp_temperature`
WHERE `DATESTAMP` BETWEEN :date AND :date + INTERVAL 1 DAY
GROUP BY HOUR(`DATESTAMP`)
) AS `t` ON `t`.`hour` = `p`.`hour`
JOIN (
SELECT `DATA_SENSOR` AS `humidity`
FROM `humidity`
WHERE `DATESTAMP` BETWEEN :date AND :date + INTERVAL 1 DAY
GROUP BY HOUR(`DATESTAMP`)
) AS `h` ON `h`.`hour` = `p`.`hour`
Before MySQL 5.7.7, subqueries cannot be used in the FROM clause of a view.